iOS崩溃日志分析

3,361 阅读2分钟

iOS设备在APP闪退时,会生成一个崩溃日志,保存在设备上,该日志保存了崩溃瞬间正在执行的每个线程的堆栈跟踪信息,从中可以了解到闪退发生时各个线程都在做什么,并分辨出闪退发生在哪个线程上。可以将iPhone连接到Xcode上将日志导出,也可以在APP中接入Bugly等异常上报工具获取崩溃日志。 下面介绍基于Bugly的崩溃日志分析方法。

下图是收集到的原始的崩溃日志,只有当前的堆栈地址信息

我们需要根据dSYM文件来对日志文件进行符号化

1、dSYM文件的获取方式为:

在Xcode中依次选择Window、Organizer,在Archives中右键选择某一个版本,选择“Show in Finder”,继续右键选中对应的"xcarchive"文件,选择“显示包内容”,在打开的目录中进入dSYMs文件夹,如下图

2、下载Bugly iOS符号表工具,该工具中包括符号表工具jar包、Windows的脚本、Shell脚本等;

将dSYM文件拷贝到与工具jar包同目录下,执行以下命令:

java -jar buglySymboliOS.jar -i 文件名.dSYM

会生成一个zip文件,将该文件上传到Bugly平台即可,最终效果如下图:

3、如果知道了堆栈信息,并且获取了dSYM文件,不用Bugly平台的解决方案为:

右键选中dSYM文件,选择“显示包内容”,依次选择Contents、Resources、DWARF,最后会看到一个以APP名称为文件名的文件,打开terminal,执行下列命令:

atos -o 刚刚在DWARF中找到的文件的路径,直接将该文件拖到terminal中即可 -l 0x00000001029a0000 -arch arm64 0x0000000102d39650

即可看到问题文件以及对应的行号。

4、如果在打包的过程中勾选了Rebuild From Bitcode,按照上述的步骤执行后,符号化的崩溃日志如下图所示:


只有行号,没有文件名。这是因为勾选后,Xcode会用晦涩难懂的符号比如“hidden#9276”来代替APP里的dSYM文件,但是Xcode会创建一个原始符号和隐藏符号的对照表,并且将其存储在Archive的app文件中的BCSymbolMaps文件夹中,可以通过下面的命令进行解析:

xcrun dsymutil -symbol-map 文件路径/BCSymbolMaps dSYM文件路径/64608820-427D-30EE-B350-BF97C9A5F3CD.dSYM

之后可按照步骤2或者步骤3执行。