В Mac OS приложение, которое вызывает сигнал (через исключение нулевого указателя или что-то подобное), обычно показывает стандартное диалоговое окно аварийного завершения Mac OS, включая хорошую трассировку стека о том, где произошел сигнал.Если у вас есть отчет о сбое, это поможет вам выяснить, где проблема возникла в вашем коде, и исправить ее.
Эту трассировку стека легко найтии выяснить, где было выполнение, где он потерпел крах.
Однако стандартный отчет о сбое Mac OS предлагает пользователю отправить его в Apple, что бесполезно, поскольку пользователи просто нажимают кнопку и предполагают, что мы получилиотчет о сбое, когда на самом деле мы не сделали.Вместо этого я хочу показать свой собственный отчет о сбое с трассировкой стека, который говорит пользователю отправлять его мне по электронной почте, или автоматически отправляет его в веб-форму, или что-то подобное.
Как получить трассировку стеказа такой сигнал?Я пробовал следующее:
Установлен обработчик необработанных исключений - без изменений, я все еще получаю обычный диалог сбоя Mac OS.
@попробуйте / @catch вокруг программы - без изменений, я все еще получаю обычный диалог сбоя Mac OS.
Установите обработчики сигналов, используя signal (), которые выдают исключение при вызове - я могу пойматьисключение и получить стек вызовов из него, но трассировка стека показывает обработчик сигнала и менее полезна, чем трассировка стека, которую я вижу в ошибке Mac OS, выше.
Строка с номером 3 на этом изображении - это то место, где вызывается обработчик сигнала - он не дает такой же трассировки стека, как стандартный отчет о сбое, даже если вы игнорируете очевидное "здесь я кидаюбит «исключение».
Как мне продублировать поведение стандартного отчета о сбое, где он дает мне стек вызовов, из которого был сгенерирован сигнал?