NSSetUncaughtExceptionHandler
私のアプリには、クラッシュをキャッチするために使用するクラッシュ レポート ライブラリが含まれています。クラッシュ レポートの実装の前後に、カスタム アクション (ログ クラッシュと表示アラート ビュー) を実装する必要があります。この動作を実現するには、まず を使用して以前の UncaughtExceptionHandler への参照を保持しNSGetUncaughtExceptionHandler()
、カスタム例外ハンドラーとシグナル ハンドラーを登録します。カスタム ハンドラーで、カスタム アクションの前/後に前のハンドラーを実行しようとしましたが、これにより、previousHandler(exception) のシグナル SIGABRT がスローされます (両方の場合)。コード例は次のとおりです。
static NSUncaughtExceptionHandler *previousHandler;
void InstallUncaughtExceptionHandler()
{
// keep reference to previous handler
previousHandler = NSGetUncaughtExceptionHandler();
// register my custom exception handler
NSSetUncaughtExceptionHandler(&HandleException);
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);
}
void HandleException(NSException *exception)
{
// execute previous handler
previousHandler(exception);
// my custom actions
}
void SignalHandler(int signal)
{
NSLog(@"SignalHandler");
}
- シグナルをスローせずに前のハンドラーを実行するにはどうすればよいですか?
SignalHandler
システムがシグナルをスローしたときに呼び出されない理由はありますか?