Я переписывался с одним из авторов CrashReporter, Лэндоном (спасибо!), Чтобы дать некоторую дополнительную ясность по этому вопросу.
Очевидно, что механизмы, используемые CrashReporter (сигналы) и отловом сбоя Apple (исключения Маха), различны и взаимно совместимы.
Понимаете ли вы разницу между тем, как Apple ловит сбои по сравнению с CrashReporter? Я не посмотрел внимательно на источник CrashReporter, но из того, что я прочитал / помню, он работает путем регистрации обработчиков сигналов? Это точно?
Справа - PLCrashReporter регистрирует стандартные обработчики сигналов для сигналов, которые его интересуют:
http://code.google.com/p/plcrashreporter/source/browse/trunk/Source/PLCrashSignalHandler.m#41
http://code.google.com/p/plcrashreporter/source/browse/trunk/Source/PLCrashSignalHandler.m#223
Знаете ли вы, использует ли Apple другой механизм?
Apple использует обработчик исключений Маха для реализации своих отчетов о сбоях как на Mac OS X, так и на iPhone; Исключения mach могут обрабатываться сервером исключений (как внутри процесса, так и вне процесса) - стандартный обработчик исключений UNIX, предоставляемый ядром, отображает исключения mach в сигналы UNIX.
Обработчик исключений UNIX зарегистрирован здесь:
http://fxr.watson.org/fxr/source/bsd/kern/bsd_init.c?v=xnu-1456.1.26#L999
Для отчетов о сбоях преимущество API исключений Маха состоит в том, что вы можете просто передать неизмененные исключения непосредственно следующему обработчику. Я исследовал реализацию этого на ранней стадии, но необходимый API был закрытым [1], поэтому остановился на регистрации стандартных обработчиков сигналов UNIX. Если вы хотите узнать больше о системе исключений Маха, я бы рекомендовал начать с главы 9, раздел 7 внутренних компонентов Mac OS X.
Ура,
Лэндон
[1] В Unity 3d недавно возникли проблемы с частным API исключения mach через exc_server ():
http://blogs.unity3d.com/2009/11/14/unity-iphone-app-store-submissions-problem-solved/