【发布时间】:2016-02-02 01:36:44
【问题描述】:
我的应用包含崩溃报告库,它使用NSSetUncaughtExceptionHandler 来捕获崩溃。
我需要在崩溃报告实施之前\之后实施自定义操作(记录崩溃并显示警报视图)。
为了实现这种行为,首先我使用NSGetUncaughtExceptionHandler() 保留对先前UncaughtExceptionHandler 的引用,然后注册我的自定义异常处理程序和信号处理程序。在我的自定义处理程序中,我尝试在自定义操作之前\之后执行上一个处理程序,但这会为 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在系统抛出信号时不调用吗?
【问题讨论】:
标签: ios objective-c exception uncaughtexceptionhandler