Мое приложение включает библиотеку отчетов о сбоях, которая использует NSSetUncaughtExceptionHandler
для обнаружения сбоев. Мне нужно реализовать настраиваемое действие (сбой журнала и отображение предупреждений) до\после реализации отчета о сбое. Чтобы добиться такого поведения, сначала я сохраняю ссылку на предыдущий UncaughtExceptionHandler, используя NSGetUncaughtExceptionHandler()
, а затем регистрирую свой собственный обработчик исключений и обработчик сигналов. В моем пользовательском обработчике я пытался выполнить предыдущий обработчик до\после моих пользовательских действий, но это выдает сигнал 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
не вызывается, когда система выдает сигнал?