如何使用atos手动符号化崩溃日志

7
在整个互联网上搜索了很久,我终于找到了一种方法来解析苹果发送的崩溃日志,我最终通过在终端中使用atos命令来解析崩溃日志。我有dSYM文件、.app文件和崩溃日志都在同一个文件夹中,使用atos -arch armv7 -o APPNAME我已经能够输入内存地址,并且有时候(但相当少)会出现方法名。老实说,我对终端或崩溃日志并没有太多的经验。尝试从Xcode的组织者中解析崩溃日志不幸地一无所获,而尝试使用Xcode包内容中的symbolicatecrash文件也失败了。所以我只能选择另一种我知道的方法。
现在,我的问题是:如何理解这些内存地址?我必须输入哪些地址才能到达应用程序崩溃的点?我已经完成了90%,我只是不知道哪些地址会给我有价值的信息,哪些是无用的。这里附上一张崩溃日志的图片:

enter image description here

非常感谢任何帮助。
2个回答

12

我猜你看到了Stack Overflow网站上的一个问题,其中包含了有关atos信息(就像我一样),但是你没有正确计算地址并输入到atos中。请参见此处:

iOS崩溃报告:atos未按预期工作

符号地址 = 偏移量 + 栈地址 - 载入地址

使用otool获取您的偏移量(通常为0x001000)

otool -arch ARCHITECTURE -l "APP_BUNDLE/APP_EXECUTABLE" | grep -B 3 -A 8 -m 2 "__TEXT"

滚动到崩溃日志底部,在二进制图像部分获取堆栈地址(二进制图像下的列表中第一个地址)。

然后使用Mac附带的HEX计算器进行求和(使用程序员视图)。 最后,从崩溃日志中的堆栈跟踪中减去您的加载地址(在您的情况下,看起来是0x00012efe)。

将此放入atos中以获取导致崩溃的行:

atos -arch armv7 -o YOURAPP.app'/'yourapp' 0xADDRESSFROMABOVE

2
这还有必要吗?苹果关于使用atos进行符号化的文档表明,您只需要使用-l参数提供加载地址即可。例如:atos -arch armv7 -o YOURAPP.app'/'yourapp' -l 0x11000 0x00012efe - sgdesmet

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接