丢失dSYM文件后,如何解析Crash日志

如果之前打包的代码也找不到了,就不要往下看了

起因

版本上线后,bugly上发现存在较多crash,由于符号表被清理磁盘的定时任务给删掉了,无备份也未上传bugly,所以只能看到未解码的堆栈(忽然发现竟然bugly无法下载到原始的crash.log文件)

解决

正常解码步骤:

  1. 找到symbolicatecrash工具,拷贝到待使用的文件夹
    find /Applications/Xcode.app -name symbolicatecrash -type f
  2. Crash文件
    这里是从 XCode-Crashes 里拿出来的
  3. dSYM & app 文件
    注意两者的UUID需要一致, xcrun dwarfdump --uuid xxx(dSYM / ipa 的路径)
  4. 设置环境变量
    export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
  5. 解码 (网上好多都没写.app 反正不包含我解不出来)
    ./symbolicatecrash ./xxx.crash ./xxx.app.dSYM ./xxx.app > symbol.crash

关于dSYM网上也有人试验过是一致的,我未实验验证:
如果两次打包的代码&xcode完全一致,两次打包的UUID是一致的

  1. 回滚代码重新打包
    更换了打包电脑,所以UUID是不一致的
  2. 强行按照解码步骤解码
    会失败,由于UUID不同,会直接提示无符号表 No symbolic information found
  3. 修改 .crash 文件中的UUID为 新打出的包的UUID ,再次尝试解码,成功的符号化了crash日志


    丢失dSYM文件后,如何解析Crash日志_第1张图片
    image.png

后记

上述印证了,代码一致时,每次打包对应的dSYM,即使UUID不一致,真实的文件内容也基本一致,可以用来解码crash文件。
这个结论有些粗糙,我并未进行过多次的dSYM二进制比对,不过遇到dSYM丢失时,可以按照这种方式尝试一下~~~

你可能感兴趣的