2012-12-20 19 views
4

在互联网上搜索以找到一种方式来表示我从Apple收到的崩溃日志后,终于找到了如何在终端中使用atos命令来表示崩溃日志。我有dSYM文件,.app文件和崩溃日志在同一个文件夹中,并且使用atos -arch armv7 -o APPNAME我已经能够输入内存地址,有时(但很少)方法名已经出现。说实话,我对终端或崩溃日志没有太多经验。试图象征Xcode组织者的崩溃日志遗憾地没有做任何事情,并且试图在Xcode的包内容中使用symbolicatecrash文件也失败了。所以我现在只剩下我唯一知道的其他选择了。如何用atos手动表示一个崩溃日志

现在,我的问题是这样的:人们如何去做这些内存地址的正面或反面?我必须输入哪些地址才能达到应用程序崩溃的地步?我有90%的路,我只是不知道哪些地址会给我提供有价值的信息,哪些地方没用。以下附件是一个崩溃日志的图片:

enter image description here

任何帮助是极大的赞赏。

回答

11

我的猜测是,你看到了与atos信息中的Stackoverflow问题(就像我做的那样),但没有正确计算地址放入atos。在这里看到:

iOS crash reports: atos not working as expected

符号地址=滑盖+堆栈地址 - 加载地址

使用otool让你的幻灯片地址(通常0x001000)

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

滚动至底部查看崩溃日志从二进制映像部分获取​​堆栈地址(二进制映像下列表中的第一个地址)。

然后使用Mac自带的十六进制计算器(使用程序员视图)添加它。最后从崩溃日志中的堆栈跟踪中减去你的加载地址(在你的情况下它看起来像0x00012efe)。

将这个在ATOS拿到导致崩溃的行:

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

这仍然是必要的吗?关于[atos符号化]的Apple文档(https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATE_WITH_ATOS)表明您只需要为'atos'提供'-l'参数的加载地址。例如。 'atos -arch armv7 -o YOU​​RAPP.app'/'yourapp'-l 0x11000 0x00012efe' – sgdesmet