用户工具

站点工具


ios_debug_notes

iOS 调试笔记

如何从 crash log 找到代码中对应的 crash 位置

前提条件是 crash log,app 还有符号文件三者能够匹配,否则是无法得到 crash 发生的位置信息的。根据三者各自的 UUID 来判断是否匹配。

得到 App 的 UUID:

dwarfdump --uuid Foo.app/Foo

得到符号表文件的 UUID:

dwarfdump --uuid Foo.app.dSYM/

得到 crash log 中 App 的 UUID(在 crash log 中的 Binary Images: 后面可以看到如下内容):

0x4a000 - 0x7edfff Foo armv7  <d452060283fd3f2f8c43aaa660fddeff> /var/mobile/Applications/4C1FE6D0-DE94-4846-A311-7F4269495507/Foo.app/Foo

尖括号中的就是 App 的 UUID。

需要用 symbolicatecrash 工具来进行处理,它的位置在(Xcode 4.3 及后续版本):

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/

最好是把 symbolicatecrash 工具,app,crash log 和符号文件复制到同一个目录中,然后用如下命令行:

./symbolicatecrash Foo_2013-xxx-iPad.crash Foo.app.dSYM > Foo.txt

Foo.txt 中就是解析出来的代码 crash 位置。

如果执行 symbolicatecrash 命令时出错并提示:

Error:"DEVELOPER_DIR"isnotdefined at /Applications/Xcode.app/[snip]Resources/symbolicatecrash line 53

可用如下命令解决:

export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
ios_debug_notes.txt · 最后更改: 2014/01/25 08:05 由 2ndboy