2

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

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

4

2 回答 2

2

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

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

于 2012-07-21T05:48:18.717 回答
1

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

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

编辑:在设计的第一个版本中,我使用了一个名为 UIPasteboard 的私有而不是共享内存。事实证明,这对性能造成了很大的影响。共享内存要快几个数量级。

EDIT2:但后来他们破坏了 iOS 7 中的共享内存,所以 UIPasteboard 又回来了。真可惜。

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

于 2012-07-21T14:42:25.200 回答