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

我正在使用运行在PLCrashReporter之上的QuincyKit来发现iOS应用程序中的生产崩溃并获取日志。 有时,如果我在碰撞点之上有几个调用堆栈级别的variables,它会帮助我debugging。 比如,如果logging处理代码是多层次的嵌套,那么它会崩溃在什么loggingID上。

问题是有没有办法提供某种上下文string插入到崩溃日志作为描述在生成时间? 我在进入一个调用堆栈中创buildlogging时,我会在退出时清除它。 如果它是非持久性的(即在内存中),那么更好 – 写入非易失性存储器总是会对电池造成负担,恐怕。

不,但是function是在2年前提出的,并且有一个补丁。

我实际上更喜欢一个允许logging环形缓冲区的内容的版本(它可以有效地logging消息!),这似乎更有用。

find一个有限的解决方法。 我使用一个共享内存块 ,其名称是从包ID派生来存储上下文string。 该块被正确closures时清除。 然后我重写我的Quincy委托中的-crashReportDescription ,以便它提供共享内存(如果有的话)作为描述。 如果最后一次应用程序关机是崩溃的,那么这只是非空的。

这种方法显然有缺陷。 如果他们说,在崩溃和下一次应用程序启动之间重新启动设备,则共享内存信息将丢失。

编辑:在devise的第一个版本中,我使用了一个私有的名为UIPasteboard而不是共享内存。 结果是相当的performance。 共享内存快了几个数量级。

编辑2:但他们打破了共享内存在iOS 7,所以UIPasteboard回来了。 游民。

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