我的應用程序包括崩潰報告庫,使用NSSetUncaughtExceptionHandler
爲了趕上崩潰。 我需要在崩潰報告實施之前的\之前實現自定義操作(日誌崩潰和顯示警報視圖)。 爲了實現這種行爲,首先我使用NSGetUncaughtExceptionHandler()
保留對先前UncaughtExceptionHandler的引用,並註冊我的自定義異常處理程序和信號處理程序。在我的自定義處理程序中,我試圖在自定義操作之前執行之前的處理程序,但是這會爲previousHandler(異常)(兩種情況)引發一個SIGABRT信號。 下面是代碼示例:自定義NSUncaughtExceptionHandler調用以前的異常處理程序
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
不會在系統發出信號時調用?
我還添加了'if'語句,但它仍然崩潰。你認爲信號處理程序導致問題? –
嘗試沒有他們。它們不是必需的,因爲默認處理程序調用任何'NSGetUncaughtExceptionHandler()'返回的值。您可能正在創建某種循環,但我不確定。 – Avi