我的应用程序包括崩溃报告库,使用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