![如何使用dSYM符号化crash日志。iOS解析线上crash](http://cdn.kangqingyu.com/mweb/1920-213.png)
如何使用dSYM符号化crash日志。iOS解析线上crash
1 获取未解析的crash日志。
iPhone连接mac,从Xcode->Window->Devices View Device Logs ,可以下载在此iPhone上当时crash的日志。
2 获取dSYM文件
每次编译项目,生成一个与APP同名的dSYM文件。
不同的公司,用不同的方式打包。如果自动化流程做得好,通常是有集群的,找到相应的dsym文件下载即可。命名通常是XXX.app.dSYM
3 使用xcode的symbolicatecrash工具进行符号化
3.1 找到symbolicatecrash
打开终端输入命令:
1 | find /Applications/Xcode.app -name symbolicatecrash -type f |
我的mac出现的结果:
1 | /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/iOSSupport/Library/PrivateFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash |
mac, 手机,模拟器等不同的版本。如果是iPhone真机就选择最后一个。
打开路径:
1 | /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/ |
将symbolicatecrash复制出来。
3.2 将crash, dSYM,symbolicatecrash放置在同一个文件夹
比如我放置在了
1 | /Users/kqy/Documents/crashProblem1211 |
3.3 执行命令,生成符号化的文件
1 | ./symbolicatecrash my.crash my1211.app.dSYM > result.crash |
其中my.crash是crash日志;my1211.app.dSYM是dSYM文件。
所有命令汇聚一张图
4 常见问题
4.1 Error: “DEVELOPER_DIR” is not defined at ./symbolicatecrash
解决方法是在终端执行命令:
1 | export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer" |
4.2 Warning: Unable to symbolicate from required binary: ~/Xcode/iOS DeviceSupport/13.6 (17G68) arm64e/Symbols/System/Library/Frameworks/CFNetwork.framework/CFNetwork
因为crash日志和.dSYM文件的uuid不匹配。
比如QA说这个crash是周五产生的,于是我从集群下载了周五的包对应dSYM文件。
但是实际QA记错了,这个crash是用的周四下载的包,所以应该使用周四的包对应的dSYM文件,才能保证uuid一致。
4.21 如何查看uuid
dsym的uuid
查看 my1211.app.dSYM 文件的 UUID ,在终端输入命令:
1 | dwarfdump --uuid my1211.app.dSYM |
crash日志的uuid
crash文件内Binary Images,其下一行 <> 内的 字符串就是crash文件的UUID。其行尾是app的名字及其路径。