象征着atos

时间:2012-05-13 21:53:46

标签: ios cocoa-touch nsexception

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

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

  

libsqlite3.dylib 0x30531ce4 0x30506000 + 179428

我得到像这样的一行

  

29 MyApplication 0x00059260 MyApplication + 4704

看起来我没有获得2个地址,而是将“MyApplication”放在中间。 Atos没有使用第一个地址。

enter image description here

1 个答案:

答案 0 :(得分:2)

您获得了符号化结果,因为您的应用二进制文件包含调试符号,因此调用callStackSymbols可以立即解析地址。唯一缺少的部分是行号,这些符号是应用程序的一部分,无法自动获取。

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

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

一般情况下,我建议使用基于PLCrashReporter的框架,该框架将为您提供崩溃报告的所有信息。以标准崩溃报告格式包含所有线程和二进制映像,并且也可以在App Store中运行。