
没有不会crash的app包括微信
没有不会crash的代码即使正常运行千年
只要有会看crash的程序猿
这一周是在不同的crash日志分析中度过的,公司的4个项目依次出现不同程序的随机崩溃。并且出现了非常多的灵异事件,即使看到了现象程序猿(!_! ME)也很难相信这是真的(想逃避)。当赤裸裸的现象一次又一次出现,直接导致手心出汗,精神失常(对于10年开发的我是致命的羞辱)。拿出斧头开始啃着“天外来客”。
考虑篇幅和阅读时长的习惯,在此略过以下内容:
- crash文件采集的具体步骤。
- crash文件中内容的含义解释。
- crash文件中崩溃种类的说明。
- dsym文件的来源和作用。
- crash中崩溃地址的手动解析的方法。
- 等等可以百度的内容。
记录下怎么图形化一步还原崩溃地址为可读代码的方法。
一、 Xcode还原法
最简单的方法是,提交app到app store的时候使用Xcode直接提交并且勾选上传dsym。如图

之后每周来查看一次崩溃日志
�

Xcode已经直接图形化崩溃日志,并且有完整的调用棧。
注意:将代码回退到上传时的分支和相同commit处,不然指向的代码行错误。
DONE
二、 友盟还原法
1. 查看崩溃
使用友盟统计的功能也包含crash的采集,并且crash日志会在app重启后立刻上传,时效性较好。

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

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

根据UUID查找dsym文件,如果没有使用bitcode那么直接在archive文件夹中可以找到。应该没有不用bitcode的吧,谁用谁知道它的好。
开启了bitcode那么需要到App Store Connect下载

下载后看到一堆的dSYM文件,文件名前面的一段就是UUID。

此时UUID和对应的dSYM都有了。
3. 上传dsym文件
到友盟iOS项目,选择"应用设置"后,选着左边的“符号表管理”,再点击“上传符号表文件”

选择指定的版本号后上传,上传成功后会显示解析完成。
4. 查看符号的崩溃调用棧
已经完美的完成解析了。如果你找到了对的dSYM文件的话,不然就SO SO SO (无能为力)

可以很轻松的找到崩溃的地方,然后慢慢修改吧。 并且反省下为何为崩溃。
DONE
三、 SYM工具还原法
推荐dSYM的解析工具 SYM. 此方法针对从设备上获取crash文件后解析,使用非常给力。
1. 设备获取crash文件
连接设备到电脑后,打开Xcode选择Window下Devices and Simulators

在当前设备,可以看到设备上所有的崩溃,你应该知道自己app的名称吧。 _

将崩溃日志全部选中,然后复制。
2. 查找UUID
在崩溃日志中搜索“Binary Images”,会看到app的名称,旁边的就是UUID了。

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

查看红色的就是解析完成的,并且准确无误。GOOD。
后记
可能你没看懂,没关系请多看几遍。 如果对crash还是没了解,没关系再百度下。
也许你会推荐“DSYMTools”这个工具,我也一直用了5年,一直都很好用。只是最近分析出的内容不准确。所以建议你试试我介绍的方法。
另外再强调一点使用第三方库请慎重。
补充一句
Android在友盟上也一样可以进行崩溃地址的解析,同样上传mapping文件就可以实现。
// END 2018-11-30 每天进步一点点
网友评论