如何使用dSYM符号化crash日志。解析线上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

打开终端输入命令:

find /Applications/Xcode.app -name symbolicatecrash -type f

我的mac出现的结果:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/iOSSupport/Library/PrivateFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
/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

mac, 手机,模拟器等不同的版本。如果是iPhone真机就选择最后一个。
打开路径:

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/

将symbolicatecrash复制出来。

3.2 将crash, dSYM,symbolicatecrash放置在同一个文件夹

比如我放置在了

/Users/kqy/Documents/crashProblem1211

3.3 执行命令,生成符号化的文件

./symbolicatecrash my.crash my1211.app.dSYM > result.crash

其中my.crash是crash日志;my1211.app.dSYM是dSYM文件。

所有命令汇聚一张图
image

4 常见问题

4.1 Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash

解决方法是在终端执行命令:

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 ,在终端输入命令:

dwarfdump --uuid my1211.app.dSYM

crash日志的uuid

crash文件内Binary Images,其下一行 <> 内的 字符串就是crash文件的UUID。其行尾是app的名字及其路径。

posted @ 2021-12-11 08:35  每天学习1小时  阅读(192)  评论(0编辑  收藏  举报