2012-05-11 3 views
2

Я разрабатываю приложение на Mac OS X, которое, как предполагается, иногда срабатывает (ну, не из-за моего приложения, а из-за нестабильной сторонней пробки - В нем загружается. Это приложение фактически действует как аварийный брандмауэр, при его запуске может произойти много сбоев, поэтому в это время нет необходимости обманывать пользователя.Mac OS X: предотвращение появления окна отчета о сбоях в моем приложении

Есть ли способ для предотвратить появление окна отчета о сбоях перед пользователем?

Спасибо!

PS: это об этом окне, но не для WebKit: A crash reporting window on Mac OS X

+1

Что такое «аварийный брандмауэр»? –

+0

@RobNapier: by "crash firewall" Я имею в виду метод предотвращения краха от распространения на всю вселенную. – moala

+0

Связано ли это с «MachExceptionHandler» в некоторых конфигурационных файлах .plist? – moala

ответ

3

Я не знаю ни одного действительно поддерживаемого решения, но есть некоторые (уродливые) способы его достижения.

Во-первых, вам нужно поймать сигнал самостоятельно. Я полагаю, вы знаете, как это сделать (см. sigaction). Затем в вашем обработчике сигнала аварии вызовите _exit(). Это с лидирующим подчеркиванием. Это более быстрая, менее безопасная версия exit(). Это, как правило, избегает репортера сбоев. Я использовал это в некоторых проектах на C++, у которых было такое ошибочное управление памятью, что они часто терпели крах при завершении работы. Я не горжусь этим; Я просто говорю, что это работает.

Другое решение - запустить еще один второй процесс во время вашего обработчика сбоя. Второй процесс ждет запуска CrashReporter. Когда это произойдет, убейте его. Последний раз, когда я тестировал этот подход, был 10.5. Я не знаю, запускает ли 10.7 такой же процесс для отображения этого предупреждения.

+0

Ваша опция CrashReporterKiller довольно ** уродливый кровавый **. Я попробую ваш сигнал/_exit, спасибо! – moala

+0

Killing CrashReporter определенно не является хорошим ответом. Но обработка сигналов прекрасна. Вы захотите запустить каждый плагин в своем собственном процессе с помощью обработчика сигналов. Вы можете посмотреть оболочку плагина Chrome и аналогичные решения на многих веб-серверах, которые вдохновили Chrome на примерах, но в этом случае обычно проще создавать его самостоятельно с нуля, чем следовать примерам, особенно если вы хотите поддерживать OS X вместо каждой платформы. – abarnert

1

Для общесистемного решения, читайте man ReportCrash. Однако это решение не относится к конкретному приложению.

Смежные вопросы