iOS:如何在应用崩溃时捕获所有错误数据?

时间:2012-06-01 01:30:13

标签: iphone ios ipad

除了在main方法中记录所有NSExceptions之外,我还应该在哪里捕获所有错误消息?例如。如果我的应用程序因访问过度释放的对象而崩溃,我如何获取有关崩溃的所有可用信息并将其写入设备上的本地文件?我知道如何在XCode中执行此操作,但需要从异地QA测试人员处获取此信息。

当发生这些内存错误时,它们似乎没有被主方法捕获。

2 个答案:

答案 0 :(得分:3)

这样做非常好,实际上非常具有挑战性。您正处于崩溃中,这意味着系统处于未定义状态。小错误可能导致完全死锁(例如,如果在堆被锁定时崩溃,那么您尝试分配更多内存)。除非您正在寻找构建和调试它的学习体验,否则您应该重用现有框架。最好的IMO是PLCrashReporter,经过多次迭代才能达到当前状态。它甚至可以很好地与QuincyKit集成,用于您自己的服务器上的崩溃报告管理(以及一些商业解决方案)。

如果你决定自己写(我提到你不应该吗?),首先要研究PLCrashReporter,看看他们是如何做到的。如果我有一个最重要的规则,那就是:在崩溃期间尽可能少地做,然后在下次启动时处理任何复杂的处理。

答案 1 :(得分:1)

this post中的信息可能会对您有所帮助。基本上,您可以在objective-c中设置一个函数,以便在满足无法处理的异常或信号时调用

看起来像这样:

NSSetUncaughtExceptionHandler(&HandleException);
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);

本文的其余部分将介绍如何设置这些方法(HandleException和SignalHandler)。