- 如何应用 dSYM 符号化 crash 日志。解析线上 crash
- 1 获取未解析的 crash 日志。
- 2 获取 dSYM 文件
-
3 应用 xcode 的 symbolicatecrash 工具进行符号化
- 3.1 找到 symbolicatecrash
- 3.2 将 crash, dSYM,symbolicatecrash 搁置在同一个文件夹
- 3.3 执行命令,生成符号化的文件
-
4 常见问题
- 4.1 Error: “DEVELOPER_DIR” is not defined at ./symbolicatecrash
-
4.2 Warning: Unable to symbolicate from required binary: ~/Xcode/iOS DeviceSupport/13.6 (17G68) arm64e/Symbols/System/Library/Frameworks/CFNetwork.framework/CFNetwork
-
4.21 如何查看 uuid
- dsym 的 uuid
- crash 日志的 uuid
-
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 文件。
所有命令汇聚一张图
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 的名字及其门路。