Перехват событий сбоя на платформах Apple не прост. signal
может использоваться для захвата многих типов событий, но есть некоторые виды завершений, которые будут пропущены при использовании только сигналов. Средство исключений Маха (не путать с исключениями времени выполнения) можно использовать для захвата большего количества типов событий. Технически, NSSetUncaughtExceptionHandler
не фиксирует сбои, а только детали необученных исключений Objective-C. Он не захватывает необработанные исключения C ++, даже несмотря на то, что под капотом исключения ObjC строятся поверх C ++.
К сожалению, вы действительно не можете полагаться только на одну систему. Я обнаружил, что сигнальные возможности POSIX на платформах Apple проблематичны. Но из-за некоторых ограничений в работе исключений Mach использование обоих обеспечит вам наибольшее покрытие.
Теперь функции C на самом деле не являются особыми или отличными от методов ObjC. Если вы пропускаете сбой, это, вероятно, связано с природой самого сбоя или с тем, как вы управляете процессом. Мне нужно увидеть детали обоих, чтобы дать вам лучшую информацию. Если вы можете, пожалуйста, обновите свой вопрос с более подробной информацией.
Возможно, вас также заинтересует проект с открытым исходным кодом, над которым я работаю, который специально разработан для того, чтобы стать ядром системы отчетов о сбоях. Не стесняйтесь обращаться к коду и / или попробовать его. https://github.com/ChimeHQ/Impact