可可应用程序的崩溃报告生成器

9
我正在开发一个针对Leopard及以上版本的Cocoa应用程序,考虑为其添加崩溃报告器(虽然我希望我的应用不会崩溃,但是让我们现实一点)。在真正开始之前,我有一些基本问题。
1)从概念上讲,如何工作,知道何时出现崩溃并提供报告?我是否需要运行一个守护进程来寻找崩溃,或者等到下次启动我的应用程序才报告?
2)可以在Cocoa中完成吗?还是我需要使用Carbon或IOKit等其他框架?
3)这是个好主意吗?Mac OS X已经有了内置的崩溃报告器,但作为开发人员,我无法看到崩溃日志。坦白说,我认为我的应用不会经常崩溃,但我只是不想对这种事情太天真。
您对此有何想法和意见?

1
有没有人想回答这篇关于2013年的帖子?所有的答案都已经过时了,但问题仍然非常相关... - Bertrand Caron
7个回答

3
我使用了UKCrashReporter,并且取得了很大的成功。这段代码十分简单易懂,可以轻松修改以适应您的应用程序的外观和感觉。 PLCrashReporter看起来也很有趣。
我建议避免使用Smart Crash Reporter,因为许多用户(理所当然)不喜欢您的应用程序将代码注入到意想不到的地方,并且这种方法对我来说似乎是脆弱的(也许在发布的应用程序中使用会很危险)。

你介意更新一下你的回答吗?我不会感到惊讶,如果你的新回答完全不同。 - Bertrand Caron

2

其他人已经很好地回答了这个问题,并指出了一些很好的示例代码。

自己编写代码相当简单。通常的策略是:

  • 捕获适当的信号
  • 启动一个独立的崩溃报告应用程序,该应用程序位于您的应用程序包内
  • 然后,崩溃报告应用程序会查找您的应用程序的最新崩溃日志条目,并通过您希望的任何方法(POST、电子邮件等)将其发送给您

2
我也自己开发了一个: SFBCrashReporter。关于它,我在我的博客上写了一篇小文章:链接

1
我在我的应用程序中使用过这个,感觉非常满意。不过,当前版本是为启用GC的应用程序设计的,因此在非GC应用程序中使用它需要进行少量调整。我也尝试过UKCrashReporter,但更喜欢这个。 - hasseg

1

我见过一些应用程序使用智能崩溃报告器或其变体。当您的应用程序崩溃时,它将弹出通常的苹果崩溃对话框,并带有一个额外的按钮,上面写着“发送给苹果和您”


1

我会避免使用Smart Crash Reporter,因为它给很多用户留下了不好的印象,而且是让你的应用程序获得负面新闻报道(无论是否应该)的好方法。PLCrashReporter或UKCrashReporter http://zathras.de/angelweb/sourcecode.htm 会提供一些关于如何以不注入其他代码空间的方式进行操作的想法。


1

另一个选择是谷歌的Breakpad。它有一个Cocoa框架包装器,并且与Mozilla的Socorro服务器兼容。它被Firefox使用,而Cocoa框架在当前的Camino测试版中使用。客户端集成非常容易,但我从未研究过运行Socorro服务器实例所需的内容。


0

我正在使用ILCrashReporter,它的效果非常好。该方法基于电子邮件,因此与Fogbugz非常兼容。


ILCrashReporter在Snow Leopard上无法工作...有什么线索吗? - Devarshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接