Custom NSUncaughtExceptionHandler invoca el manejador de excepciones anterior

Mi aplicación incluye una biblioteca de informes de NSSetUncaughtExceptionHandler que utiliza NSSetUncaughtExceptionHandler para detectar los lockings. Necesito implementar acciones personalizadas (locking de logging y visualización de la vista de alerta) antes \ después de la implementación de informes de locking. Para lograr este comportamiento, primero mantengo una reference a UncaughtExceptionHandler anterior usando NSGetUncaughtExceptionHandler() , y que NSGetUncaughtExceptionHandler() mi manejador de excepciones personalizado y el manejador de señales. En mi manejador personalizado intenté ejecutar el manejador anterior antes de \ después de mis acciones personalizadas, pero esto arroja una señal SIGABRT para el manejador previo (exception) (en ambos casos). Aquí está el ejemplo del código:

 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"); } 
  1. ¿Cómo puedo ejecutar el manejador anterior sin lanzar una señal?
  2. ¿Alguna idea de por qué SignalHandler no llama cuando el sistema lanza una señal?

    No registre los manejadores de señal. Debo ofuscar un poco el código que se presenta a continuación, pero es de una aplicación de producción que está en la App Store:

    Aplicación AppDelegate: didFinishLaunchingWithOptions:

     fabricHandler = NSGetUncaughtExceptionHandler(); NSSetUncaughtExceptionHandler(&customUncaughtExceptionHandler); 

    Entrenador de animales:

     void customUncaughtExceptionHandler(NSException *exception) { // Custom handling if (fabricHandler) { fabricHandler(exception); } }