2011-12-30 70 views
3

在Mac OS,导致信号(通过一个空指针异常或类似的东西)的应用程序通常显示标准的Mac OS崩溃对话框,包括发生的信号,其中一个不错的堆栈跟踪。如果您有崩溃报告,这可以让您轻松找出代码中发生问题的位置并对其进行修复。的Mac OS信号处理/崩溃报告

mac os crash report

此堆栈跟踪是很容易查找并找出其中的执行是在那里坠毁。

然而,标准的Mac OS崩溃报告提示用户将其发送到苹果公司,因为用户会只需按下按钮,我们假定我们得到了崩溃报告的时候,其实我们并没有这是没有用的。我想改为使用堆栈跟踪来显示自己的崩溃报告,告诉用户将它发送给我,或者自动将其提交给Web窗体或类似的东西。

如何获得像这样的信号的堆栈跟踪?我试过以下:

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

  • @try /节目围绕@catch - 没有改变,我仍然得到正规的Mac OS崩溃对话框。

  • 使用signal()在调用时会抛出异常来安装信号处理程序 - 我可以捕获异常并从中获取调用堆栈,但堆栈跟踪显示信号处理程序,并且比我看到的堆栈跟踪在上面的Mac OS错误中。

enter image description here

线在此图像中编号3是在信号处理函数被调用 - 它不会产生相同的堆栈跟踪标准的崩溃报告,即使你忽视了明显的“这里的我抛出一个异常“位。

我怎么能复制一个标准的崩溃报告它让我从中产生的信号调用堆栈的行为?

回答

3

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

+0

PLCrashReporter有得到正确的堆栈帧的来源,但在Mac OS,最好让系统为你做,然后发送文件回到自己在下次启动。我有一个框架可以使用Mail.app发送无需运行自己的服务器的报告:https://gitlab.com/alfwatt/reportwindow – alfwatt 2016-07-18 19:04:24