2012-07-21 56 views
2

我使用运行在PLCrashReporter之上的QuincyKit来发现iOS应用中的生产崩溃并获取日志。有时,如果我在碰撞点之上有几个调用堆栈级别的变量,它会帮助我调试。比如,如果记录处理代码是深层嵌套的许多级别,它会崩溃的是哪个记录ID。QuincyKit/PLCrashReporter:在崩溃前提供描述*

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

回答

1

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

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

编辑:在设计的第一个版本中,我使用了一个私有的名为UIPasteboard而不是共享内存。结果是相当的表现。共享内存快了几个数量级。编辑2:但他们打破了iOS 7中的共享内存,所以UIPasteboard又回来了。游民。

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

2

不,但feature was proposed over 2 years ago,并有一个补丁。

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

相关问题