Crash Log 符号化

当我们导出一个 crash 日志的时候,我们打开crash文件,是否发现并不能定位到底crash在哪里?只能从中取到一些薄弱的信息,比如消息调用失败,如下图:

image.png

那我们就需要一种操作叫做“符号化”。

首先,Crash Log 符号化,和三个东西有关:1. crash 文件,2. 对应的**.dSYM 文件 3. symbolicatecrash 执行脚本。

  1. **.dSYM文件
    dSYM 文件是一个打包之后才会生成的文件,记录这代码对应的方法、函数、行数等信息。
    我们要获取这个文件,我们需要从crash Log 的版本包中获取。获取方法如下:
    Xcode->Window->Organizer->"选择对应的app,双击对应项目"->Show in finder->.xcachive ->打开包内容。
    将取到的文件复制到与crash文件同一个文件夹。

注意:dSYM 文件很重中,是我们通过Crash Log 分析crash的重要文件,所以基本上所有的bug SDK分析都需要上传版本的dSYM文件。

  1. 执行脚本文件symbolicatecrash
    这个文件是Xcode app的内置脚本执行文件,具体在Xcode⁩ ▸ ⁨Contents⁩ ▸ ⁨SharedFrameworks⁩ ▸ ⁨DVTFoundation.framework⁩ ▸ ⁨Versions⁩ ▸ ⁨A⁩ ▸ ⁨Resource 里。

找到脚本执行文件之后,复制执行脚本文件到crash文件同一文件夹中。

  1. 我们还需要设置环境变量
    export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"

  2. 执行脚本,输出符号化的文件
    ./symbolicatecrash **.crash **.dSYM > log.crash

如果终端打印出:No symbolic information found,说明crash文件和dSYM文件不是对应的,他们UUID不一致。需要找到与crash一致的dSYM文件。

  1. 如何看crash文件的UUID和dSYM文件的UUID?

crash 文件:直接打开,找到下方的Binary Images:(二进制镜像),其下第一行即是带有UUID的。如下:


image.png

dSYM文件:使用命令 dwarfdump --uuid **.dSYM 就可以。

以上就是我们如何符号化一个crash log的方法。

你可能感兴趣的:(Crash Log 符号化)