关于ios:如何使用dSYM符号化crash日志解析线上crash

7次阅读

共计 2418 个字符,预计需要花费 7 分钟才能阅读完成。

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

正文完
 0