我一直在使用XCode的一个有用技巧是adding breakpoints on exceptions。
我想知道为什么我们需要添加两个断点-一个用于objc_exception_throw
,另一个用于[NSException raise]
。
一个涵盖了哪些情况而另一个则没有?
最佳答案
您只应在objc_exception_throw
上使用断点。 -[NSException raise]
方法调用objc_exception_throw
,因此objc_exception_throw
涵盖了-[NSException raise]
涵盖的所有情况。另一种方法是不正确的:@throw
指令被编译为直接调用objc_exception_throw
。此方法显示了不同之处:
- (void)throwAndCatch
{
@try {
NSException *exception = [[NSException alloc] initWithName:@"Test"
reason:@"test"
userInfo:nil];
@throw exception;
}
@catch (NSException *exception) {
NSLog(@"Caught");
}
}
调用
-throwAndCatch
时,-[NSException raise]
上的断点无效,而objc_exception_throw
上的断点将起作用。关于objective-c - objc_exception_throw和[NSException提高]有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11038083/