Обработка сигналов Mac OS / отчеты о сбоях - PullRequest
3 голосов
/ 31 декабря 2011

В Mac OS приложение, которое вызывает сигнал (через исключение нулевого указателя или что-то подобное), обычно показывает стандартное диалоговое окно аварийного завершения Mac OS, включая хорошую трассировку стека о том, где произошел сигнал.Если у вас есть отчет о сбое, это поможет вам выяснить, где проблема возникла в вашем коде, и исправить ее.

mac os crash report

Эту трассировку стека легко найтии выяснить, где было выполнение, где он потерпел крах.

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

Как получить трассировку стеказа такой сигнал?Я пробовал следующее:

  • Установлен обработчик необработанных исключений - без изменений, я все еще получаю обычный диалог сбоя Mac OS.

  • @попробуйте / @catch вокруг программы - без изменений, я все еще получаю обычный диалог сбоя Mac OS.

  • Установите обработчики сигналов, используя signal (), которые выдают исключение при вызове - я могу пойматьисключение и получить стек вызовов из него, но трассировка стека показывает обработчик сигнала и менее полезна, чем трассировка стека, которую я вижу в ошибке Mac OS, выше.

enter image description here

Строка с номером 3 на этом изображении - это то место, где вызывается обработчик сигнала - он не дает такой же трассировки стека, как стандартный отчет о сбое, даже если вы игнорируете очевидное "здесь я кидаюбит «исключение».

Как мне продублировать поведение стандартного отчета о сбое, где он дает мне стек вызовов, из которого был сгенерирован сигнал?

1 Ответ

3 голосов
/ 31 декабря 2011

Я настоятельно рекомендую PLCrashReporter .Он обрабатывает необработанные исключения и фатальные сигналы и генерирует отчет о сбое, аналогичный тому, который вы видите в диалоговом окне сбоя Apple.Существуют различные услуги, которые вы можете заплатить за аналитику сбоев (группировка по версии и общий вызов стека).Или вы можете запустить сервер самостоятельно.Одна служба с открытым исходным кодом - QuicyKit .

...