如果之前打包的代码也找不到了,就不要往下看了
起因
版本上线后,bugly上发现存在较多crash,由于符号表被清理磁盘的定时任务给删掉了,无备份也未上传bugly,所以只能看到未解码的堆栈(忽然发现竟然bugly无法下载到原始的crash.log文件)
解决
正常解码步骤:
- 找到symbolicatecrash工具,拷贝到待使用的文件夹
find /Applications/Xcode.app -name symbolicatecrash -type f
- Crash文件
这里是从 XCode-Crashes 里拿出来的- dSYM & app 文件
注意两者的UUID需要一致,xcrun dwarfdump --uuid xxx(dSYM / ipa 的路径)
备注:根据uuid查找电脑中的DSYM文件mdfind 12345678-1234-1234-1234-1234-xxxx(UUID不包含‘-’也可以)
- 设置环境变量
export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
- 解码 (网上好多都没写.app 反正不包含我解不出来)
./symbolicatecrash ./xxx.crash ./xxx.app.dSYM ./xxx.app > symbol.crash
关于dSYM网上也有人试验过是一致的,我未实验验证:
如果两次打包的代码&xcode完全一致,两次打包的UUID是一致的
- 回滚代码重新打包
更换了打包电脑,所以UUID是不一致的 - 强行按照解码步骤解码
会失败,由于UUID不同,会直接提示无符号表No symbolic information found
-
修改 .crash 文件中的UUID为 新打出的包的UUID ,再次尝试解码,成功的符号化了crash日志
image.png
后记
上述印证了,代码一致时,每次打包对应的dSYM,即使UUID不一致,真实的文件内容也基本一致,可以用来解码crash文件。
这个结论有些粗糙,我并未进行过多次的dSYM二进制比对,不过遇到dSYM丢失时,可以按照这种方式尝试一下~~~
网友评论