• 如何应用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的名字及其门路。