查找symbolicatecrash
find /Applications/Xcode.app -name symbolicatecrash -type f
结果示例:
/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
将真机的版本symbolicatecrash拷贝到工作目录。
将crash.log和dSYM文件拷贝到工作目录
需要保证crash.log和dSYM的uuid是对应的,验证方式如下:
- 打开crash.log,找到slice_uuid:"UUID字符串";
- 获取dSYM的uuid:dwarfdump --uuid XX.app.dSYM,示例:
UUID: 8A3A1C4E-53DE-3B57-A98B-A22341106E2A (armv7) Myapp.app.dSYM/Contents/Resources/DWARF/Myapp
UUID: 1C481246-F6D4-3046-A80F-CAE800175402 (arm64) Myapp.app.dSYM/Contents/Resources/DWARF/Myapp
- 保证两处的uuid(相同架构)一致即可。
crash log符号化
进入工作目录,依次执行:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
./symbolicatecrash crash.log Myapp.app.dSYM > log.txt
log.txt即为符号化之后的log信息,便于查看。
解析指定地址
拿到crash log文件之后,很多时候我们只需要关心crash线程的调用栈,典型示例如下:
Thread 0 Crashed:
...
5 APP 0x104a06b30 0x1045c0000 + 4483888
6 APP 0x104a16d4c 0x1045c0000 + 4549964
这个时候可以用atos工具解析指定地址的符号:
atos -arch arm64 -o Myapp.app.dSYM/Contents/Resources/DWARF/Myapp -l 0x1045c0000 0x104a06b30
[扩展]Xcode Instruments: missing symbols
有时在使用Instruments分析时会出现missing symbols的情况,不利于分析泄露等问题。此时需要确保Debug Information Format开启了DWARF with dSYM File。还不行的话,就打开Instruments工具->File->Symbols,手动指定dSYM File,路径一般为~/Library/Developer/Xcode/DerivedData/xxxx/Build/Products/Debug-iphoneos/xxx.app.dSYM。
留言板