4

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

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

4

2 回答 2

3

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

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

于 2012-06-01T02:55:10.050 回答
1

这篇文章中的信息可能会对您有所帮助。基本上,您可以在objective-c中设置一个函数,以便在遇到未处理的异常或信号时调用

看起来像这样:

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

文章的其余部分将描述如何设置这些方法(HandleException 和 SignalHandler)。

于 2012-06-01T01:51:49.950 回答