KangQingYu
Articles48
Tags16
Categories7
如何使用dSYM符号化crash日志。iOS解析线上crash

如何使用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
2
3
4
5
/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真机就选择最后一个。
打开路径:

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的名字及其路径。

Author:KangQingYu
Link:http://example.com/2021/12/11/20211211_%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8dSYM%E7%AC%A6%E5%8F%B7%E5%8C%96crash%E6%97%A5%E5%BF%97%E3%80%82%E8%A7%A3%E6%9E%90%E7%BA%BF%E4%B8%8Acrash/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×