前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用symbolicatecrash解析了一个crash log

使用symbolicatecrash解析了一个crash log

作者头像
且行且珍惜_iOS
发布2021-09-07 16:43:26
8230
发布2021-09-07 16:43:26
举报

有一天,测试同学给了我一个未经符号化的崩溃日志。如果是以前,我会找到打这个测试包的同事,让他将奔溃日志符号化后发给我。但是这次,我老板傲娇的拒绝了,而是让我自己来做符号化的工作>.<

工具和必要文件 上网查了查,我选择了symbolicatecrash工具来符号化这个崩溃日志。这是Xcode自带的一个perl脚本。

另外,我还需要崩溃日志(测试同学给了我一个.plist文件),测试包对应的.dSYM文件和测试包对应的.app文件。

使用symbolicatecrash 在Xcode6.0之后,这个脚本位于

代码语言:javascript
复制
Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

从它开头的注释中,可以了解到,它会利用Spotlight,通过UUID来搜索需要的.dSYM文件,然后找到对应的可执行文件,然后搜索SDK目录。

所以我们可以这样把崩溃日志、.dSYM文件和.app文件放到某个目录下,先在命令行中运行:

代码语言:javascript
复制
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

然后运行symbolicatecrash,比如这样:

代码语言:javascript
复制
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash   ~/myCrash/myCrash.plist  > ~/myCrash/myCrash.log

就能在得到符号化之后的崩溃日志了。

System framework的符号化

当我按照上面的步骤运行了symbolicatecrash之后,我发现得到的符号化之后的崩溃日志中,只有应用本身被符号化了,UIKit等system framework却没能被符号化。 可能就是这样(图是stackoverflow上截的):

只有一部分被符号化了的崩溃日志

然而网上的教程都没有提到这种情况(╥﹏╥)

那让我来想想这是为什么吧。

如果要让system framework被符号化,那么一定有相关的符号文件存在我电脑的某个地方。它一定会与iOS的版本有关,因为iOS的每次升级,肯定都会有不同的system framework的符号文件。 查了一下,果然,在~/Library/Developer/Xcode/iOS DeviceSupport/中能看到以iOS版本号命名的一些文件夹。而我需要符号化的崩溃日志,发生在运行着iOS7.0.6的设备上。而我电脑中,这个文件夹里面却没有iOS7.0.6的文件夹。 想起每当我第一次将某个iOS设备连接到电脑上时,Xcode都会loading一段时间,才能使用这个设备。在loading的阶段,依稀记得Xcode上的提示是“copying symbols”之类的。于是我想,我电脑中的system framework的符号文件,应该就是这样来的。

所以找测试同学借了发生这个crash的设备,连接到电脑,果然出现了一个新的文件夹。

出现了7.0.6文件夹

而当Xcode的loading结束后,再次运行symbolicatecrash,就得到了完整的符号化之后的崩溃日志。

参考

分析iOS Crash文件:符号化iOS Crash文件的3种方法 symbolicatecrash with XCode 4.2 not symbolicating system symbols

2016.01.24更新 可以用这个命令在电脑里找到某个uuid对应的dSYM文件:

代码语言:javascript
复制
mdfind "com_apple_xcode_dsym_uuids == xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-1-17 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工具和必要文件 上网查了查,我选择了symbolicatecrash工具来符号化这个崩溃日志。这是Xcode自带的一个perl脚本。
  • 使用symbolicatecrash 在Xcode6.0之后,这个脚本位于
  • System framework的符号化
    • 参考
    • 2016.01.24更新 可以用这个命令在电脑里找到某个uuid对应的dSYM文件:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档