MyApplication使用NSException实例创建个性化的崩溃报告。该应用程序检索callStackSymbols数组并将其添加到文本文件。

如果您在崩溃报告中注意到,而不是得到像这样的一行:

libsqlite3.dylib 0x30531ce4 0x30506000 + 179428

我得到这样一条线

29 MyApplication 0x00059260 MyApplication + 4704

看起来我没有得到2个地址,而是在中间得到了“MyApplication”。
Atos无法使用第一个地址。

最佳答案

由于应用程序二进制文件包含调试符号,因此您得到了带符号的结果,因此调用callStackSymbols可以立即解析地址。唯一缺少的部分是行号,当符号成为应用程序的一部分时,行号是不可能自动获得的。

这三个数字值是:Address = Base Address + Offset。这意味着第一个地址足以获取符号。基址是二进制文件/框架的起始地址。通常在完成符号化后,第一个地址也将更改为相对于框架地址,而不是绝对地址。应用程序二进制存储区通常从0x1000开始。这可以在崩溃报告二进制图像部分中查看,并且由于较新的iOS版本具有新的内存功能,因此它可能与0x1000不同。

因此,现在只需使用第三列中的给定地址,并在调用atos时将0x1000添加到该值中。

通常,我建议使用基于PLCrashReporter的框架,该框架将为您提供崩溃报告的所有信息。包括标准崩溃报告格式的所有线程和二进制映像,并且还可以在App Store中使用。

关于ios - 用atos象征,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10575555/

10-10 21:04