XCodeに使用している便利なヒントの1つは、例外にブレークポイントを追加することです。
なぜ2つのブレークポイントを追加する必要があるのか疑問に思いました。1つはfor objc_exception_throw
、もう1つはfor[NSException raise]
です。
一方がカバーし、もう一方がカバーしないケースは何ですか?
XCodeに使用している便利なヒントの1つは、例外にブレークポイントを追加することです。
なぜ2つのブレークポイントを追加する必要があるのか疑問に思いました。1つはfor objc_exception_throw
、もう1つはfor[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
は機能します。