在Mac OS中,导致信号的应用程序(通过空指针异常或类似的东西)通常会显示标准的Mac OS崩溃对话框,包括信号发生位置的良好堆栈跟踪。如果您有崩溃报告,这可以让您轻松找到代码中出现问题的位置并进行修复。
这个堆栈跟踪很容易查找并找出执行崩溃的位置。
然而,标准的Mac OS崩溃报告会提示用户将其发送给Apple,这是没用的,因为用户只需按下按钮并假设我们收到了崩溃报告,而事实上我们没有。我希望用堆栈跟踪显示我自己的崩溃报告,告诉用户将其通过电子邮件发送给我,或者将其自动提交到Web表单或类似的东西。
如何获得这样的信号的堆栈跟踪?我尝试了以下内容:
安装未捕获的异常处理程序 - 没有更改,我仍然可以获得常规的Mac OS崩溃对话框。
@try / @catch围绕程序 - 没有变化,我仍然可以获得常规的Mac OS崩溃对话框。
使用signal()在调用时抛出异常来安装信号处理程序 - 我可以捕获异常并从中获取调用堆栈,但堆栈跟踪显示信号处理程序并且不如堆栈跟踪I请参阅上面的Mac OS错误。
此图像中编号为3的行是调用信号处理程序的位置 - 即使您忽略了明显的“这里我抛出异常”位
如何复制标准崩溃报告的行为,它给出了生成信号的调用堆栈?
答案 0 :(得分:3)
我强烈推荐PLCrashReporter。它处理未捕获的异常和致命信号,并生成类似于您在Apple崩溃对话框中看到的崩溃报告。您可以支付各种服务来进行崩溃分析(按版本和常见的callstack分组)。或者您可以自己运行服务器。一个开源服务是QuicyKit。