关于macOS:Mac OS信号处理/崩溃报告

Mac OS signal handling / crash reporting

在Mac OS中,导致信号(通过空指针异常或类似原因)的应用程序通常会显示标准的Mac OS崩溃对话框,包括有关信号发生位置的良好堆栈跟踪。如果您有崩溃报告,则可以轻松地在代码中找出问题所在并进行修复。

mac os crash report

此堆栈跟踪很容易查找并找出执行在哪里崩溃。

但是,标准的Mac OS崩溃报告会提示用户将其发送给Apple,这无济于事,因为用户只要按一下按钮并假定我们得到了崩溃报告,而实际上却没有。相反,我想显示自己的带有堆栈跟踪的崩溃报告,告诉用户将其通过电子邮件发送给我,或者自动将其提交到Web表单或类似的内容。

如何获得类似这样的信号的堆栈跟踪?我尝试了以下方法:

  • 安装了未捕获的异常处理程序-不变,我仍然得到常规的Mac OS崩溃对话框。

  • @try / @catch程序周围-没有变化,我仍然看到常规的Mac OS崩溃对话框。

  • 使用signal()安装信号处理程序,该信号处理程序在调用时会引发异常-我可以捕获该异常并从中获取调用堆栈,但是堆栈跟踪显示了信号处理程序,并且比我在Mac OS错误中看到的堆栈跟踪没有太大帮助, 以上。

enter image description here

在此图中编号为3的行是调用信号处理程序的位置-即使您忽略明显的"这是我抛出异常的位置"位,它也不会提供与标准崩溃报告相同的堆栈跟踪。

我该如何复制标准崩溃报告的行为,使它给我生成信号的调用堆栈?


我强烈推荐PLCrashReporter。 它处理未捕获的异常和致命信号,并生成崩溃报告,类似于您在Apple崩溃对话框中看到的报告。 您可以付费使用各种服务来进行崩溃分析(按版本分组和通用调用堆栈)。 或者,您可以自己运行服务器。 一种开源服务是QuicyKit。