用 atos 进行符号化

Posted

技术标签:

【中文标题】用 atos 进行符号化【英文标题】:symbolization with atos 【发布时间】:2012-05-13 21:53:46 【问题描述】:

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

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

libsqlite3.dylib 0x30531ce4 0x30506000 + 179428

我得到了这样一条线

29 我的应用程序 0x00059260 我的应用程序 + 4704

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

【问题讨论】:

【参考方案1】:

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

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

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

一般来说,我建议使用基于PLCrashReporter 的框架,它将为您提供崩溃报告的所有信息。包括标准崩溃报告格式的所有线程和二进制图像,也可以在 App Store 中使用。

【讨论】:

以上是关于用 atos 进行符号化的主要内容,如果未能解决你的问题,请参考以下文章

如何“手动”符号化 [NSThread callStackSymbols](获取 atos 的起始地址)(iOS)

无法符号化崩溃日志

atos不支持armv7s吗?

没有 App 文件的 iOS 符号化

Symbolicating Crash Reports With atos

iOS底层 - 符号解析(dSYM & 系统符号)Go语言版本