QuincyKit / PLCrashReporter:在崩溃之前提供描述*

时间:2012-07-21 00:21:50

标签: ios crash plcrashreporter

我使用在PLCrashReporter之上运行的QuincyKit来发现我的iOS应用中的生产崩溃,并获取日志。有时,如果我从崩溃点以上的几个调用堆栈级别获得一些变量,它会极大地帮助我调试。比如,如果记录处理代码的嵌套深度很多,那么什么记录ID会崩溃。

问题是 - 有没有办法提供某种上下文字符串,它在生成时作为描述插入到崩溃日志中?我在进入一个记录的调用堆栈时设置它,我退出后清除它。如果它是非持久的(即在内存中)会更好 - 写入非易失性存储器会对电池造成负担,我很害怕。

2 个答案:

答案 0 :(得分:2)

不,但feature was proposed over 2 years ago还有补丁。

我实际上更喜欢允许记录环形缓冲区内容的版本(你可以有效地将消息记录到!),这看起来可能更有用。

答案 1 :(得分:1)

找到有限的解决方法。我使用shared memory block,其名称是从包ID派生的,用于存储上下文字符串。在正确关闭时清除该块。然后我在我的Quincy委托中覆盖-crashReportDescription,以便它提供共享内存内容(如果有)作为描述。如果上次应用程序关闭是一次崩溃,那只是非空的。

这种方法存在明显的缺陷。例如,如果他们在崩溃和下一个应用启动之间重启设备,则共享内存信息将丢失。

编辑:在设计的第一个版本中,我使用了一个名为UIPasteboard的私有而不是共享内存。结果证明这是一个非常糟糕的表现。共享内存的速度要快几个数量级。

EDIT2:但随后他们破坏了iOS 7中的共享内存,因此UIPasteboard又回来了。长号。

EDIT3:找到了另一种方法,不太优雅,但它适用于iOS 7.我将我的上下文字符串存储在一个普通的静态内存块中。我在PLCrashReporter中使用[[PLCrashReporter sharedReporter] setCrashCallbacks:]放置了一个自定义崩溃处理程序。在处理程序中,我将所述上下文(如果有的话)写出到文件中。在应用启动时,我阅读了所述文件,并在-crashReportDescription中提供了内容(如果有的话)。走开,UIPasteboard。