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。
- 当在两个嵌套子类中调用super.viewDidLoad()时,我得到了Swift无限循环
- 调用selectRowAtIndexPath时崩溃:animated:scrollPosition:
- 如何找出是什么导致IOS设备上的错误崩溃报告?
- Xcode错误 – 终止应用程序由于未捕获的exception“NSUnknownKeyException”,原因:':
- iPhone KERN_INVALID_ADDRESS
- ios谜题应用程序在几轮后崩溃
- Swift SourceKitService崩溃
- Swift 3项目中的Unity实现:应用程序启动崩溃 – MetadataCache :: Initialize()
- iOS崩溃日志帮助需要