图形化还原崩溃地址 iOS的crash文件分析

crash-图片来之网络

没有不会crash的app包括微信

没有不会crash的代码即使正常运行千年

只要有会看crash的程序猿

这一周是在不同的crash日志分析中度过的,公司的4个项目依次出现不同程序的随机崩溃。并且出现了非常多的灵异事件,即使看到了现象程序猿(!_! ME)也很难相信这是真的(想逃避)。当赤裸裸的现象一次又一次出现,直接导致手心出汗,精神失常(对于10年开发的我是致命的羞辱)。拿出斧头开始啃着“天外来客”。

考虑篇幅和阅读时长的习惯,在此略过以下内容:

  1. crash文件采集的具体步骤。
  2. crash文件中内容的含义解释。
  3. crash文件中崩溃种类的说明。
  4. dsym文件的来源和作用。
  5. crash中崩溃地址的手动解析的方法。
  6. 等等可以百度的内容。

记录下怎么图形化一步还原崩溃地址为可读代码的方法。

一、 Xcode还原法

最简单的方法是,提交app到app store的时候使用Xcode直接提交并且勾选上传dsym。如图

上传到app store
之后每周来查看一次崩溃日志 
崩溃日志
Xcode已经直接图形化崩溃日志,并且有完整的调用棧。 **注意:**将代码回退到上传时的分支和相同commit处,不然指向的代码行错误。 DONE

二、 友盟还原法

1. 查看崩溃

使用友盟统计的功能也包含crash的采集,并且crash日志会在app重启后立刻上传,时效性较好。

crash
查看到形形色色的crash信息,建议升级到友盟最新版本,使得采集信息更加的准确。 查看一个崩溃详情,可以查看崩溃的调用棧,但是涉及到APP相关的,显示的只是64位的地址内容而不是方法名和行数。
崩溃详情

2. 查看dsym文件

需要上传崩溃文件对应的dsym,此时需要先查看崩溃日志对应的UUID

UUID
根据UUID查找dsym文件,如果没有使用bitcode那么直接在archive文件夹中可以找到。应该没有不用bitcode的吧,谁用谁知道它的好。 开启了bitcode那么需要到 App Store Connect下载
DSYM
下载后看到一堆的dSYM文件,文件名前面的一段就是UUID。
dSYM
此时UUID和对应的dSYM都有了。

3. 上传dsym文件

到友盟iOS项目,选择"应用设置"后,选着左边的“符号表管理”,再点击“上传符号表文件”

上传dsym
选择指定的版本号后上传,上传成功后会显示解析完成。

4. 查看符号的崩溃调用棧

已经完美的完成解析了。如果你找到了对的dSYM文件的话,不然就SO SO SO (无能为力)

解析完成
可以很轻松的找到崩溃的地方,然后慢慢修改吧。 并且反省下为何为崩溃。

DONE

三、 SYM工具还原法

推荐dSYM的解析工具 SYM. 此方法针对从设备上获取crash文件后解析,使用非常给力。

1. 设备获取crash文件

连接设备到电脑后,打开Xcode选择Window下Devices and Simulators

查看设备日志
在当前设备,可以看到设备上所有的崩溃,你应该知道自己app的名称吧。 ^_^
所有的崩溃日志文件
将崩溃日志全部选中,然后复制。

2. 查找UUID

在崩溃日志中搜索“Binary Images”,会看到app的名称,旁边的就是UUID了。

UUID

3. SYM分析

打开SYM app后,(1)将崩溃日志复制到内容中。(2)选择UUID对应的dSYM文件。 (3)点击执行按钮。

完成

查看红色的就是解析完成的,并且准确无误。GOOD。


后记

可能你没看懂,没关系请多看几遍。 如果对crash还是没了解,没关系再百度下。 也许你会推荐“DSYMTools”这个工具,我也一直用了5年,一直都很好用。只是最近分析出的内容不准确。所以建议你试试我介绍的方法。 另外再强调一点使用第三方库请慎重

补充一句

Android在友盟上也一样可以进行崩溃地址的解析,同样上传mapping文件就可以实现。

// END 2018-11-30 每天进步一点点

猜你喜欢

转载自juejin.im/post/5c04fb896fb9a049aa6ed55a