Crash日志符号化
1.符号化crash日志需要3样东西:
1).crash日志本身(如:example.crash),从Xcode的organizer导出或者来自Itunes Connect.
2).crash日志所对应的.app包(如:example.app)如果你有的是.ipa包,你可以解压后在Payload/文件夹下获得.app包
3).crash日志多对应的.dSYM包
2.开始符号化之前,先检查一下以上3样东西是否相对应(UUID):
crash日志中可以看到类似一下内容:
...
Binary Images:
0xe1000 - 0x1f0fff +example armv7 <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff dyld armv7s <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...
说明,这个二进制镜像名为 example.app/example,UUID为 aa5e633efda8346cab92b01320043dc3 .
可以用以下命令检查.app的UUID:
dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example
检查.dSYM文件的UUID:
dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example
3.使用symbolicatecrash脚本
如果是Xcode 6.1,使用:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log
如果找不到该脚本,使用:
find . -name symbolicatecrash
用终端查找和crash日志中的uuid一只的符号文件:
mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"
如果遇到 "DEVELOPER_DIR" is not defined 的报错,执行以下命令:
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
2.使用终端符号化日志:
xcrun atos -o MyApp.app/MyApp -arch armv7 -l 0xb7000 -f MyApp.crash
其中0xb7000就是crash日子中紧跟"Binary Images:"后面的地址
参考:
http://support.hockeyapp.net/kb/client-integration-ios-mac-os-x/how-to-solve-symbolication-problems
http://stackoverflow.com/questions/1460892/symbolicating-iphone-app-crash-reports