iOS解析crash日志:

时间:2022-11-03 09:14:28

iOS解析crash日志:
我们在ios开发中会碰到的很多crash问题,如果Debug调试模式的话,我们可以往往很容易的根据log的输出定位到导致crash的原因,但对于已经上线的应用,或者是release环境包导致的crash,我们就需要一些特殊的手段来通过crash log进行分析定位了。

1.导出crash log

将产生崩溃的设备连接到PC,打开iTunes, 等待iTunes同步Crash日志完成;

Mac机器打开Finder,进入~/Library/Logs/CrashReporter/MobileDevice目录找到对应设备的crash日志并复制到crash文件夹里

2.找到对应的app文件

找到当前iphone设备上安装的ipa文件,更改文件后缀名为zip,解压后得到Payload文件夹,你需要的app文件就在其中了,放到crash文件里面。

3.找到对应build版本的dSYM文件

Xcode7以后打包的完成的时候会跳到下面的页面,右键show in finder

会出现.xcarchive文件,右键显示包内容会到下面的页面:

同样复制到crash文件里。

4.确定dSYM、app以及crash文件的关系

每一个xx.app, xxx.app.dSYM文件都拥有相应的uuid,crash文件也有uuid,只有三者uuid一至才表明之三者可以解析出正确的日志文件。
查看xx.app文件的uuid的方法,在terminal中输入命令:

查看xx.app文件的uuid的方法,在terminal中输入命令:
dwarfdump --uuid xxx.app/xxx (xxx工程名)
查看xx.app.dSYM文件的uuid的方法,在terminal中输入命令:
dwarfdump --uuid xxx.app.dSYM (xxx工程名)
而.crash的uuid位于,crash日志中的Binary Images:中的第一行尖括号内。如:
armv7 <8bdeaf1a0b233ac199728c2a0ebb4165>
5.通过symbolicatecrash分析crash文件

symbolicatecrash是一个隐藏工具,它在我的Mac中的具体路径如下(Xcode7.3app请换成你的Xcode名称)

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
或者输入密令:

find /Applications/Xcode.app -name symbolicatecrash -type f
把这个路径拷贝一下,然后粘到Finder的“前往文件夹”下,前往,就可以看到symbolicatecrash工具了,现在把它也拷到桌面的crash文件夹里。至此,crash文件夹里现在有4个文件了,分别是.app, .crash, .dSYM, symbolicatecrash。接下来就是用终端敲命令,生成更易分析的crash。
首先用cd命令进入到crash文件夹下,然后输入以下命令
./symbolicatecrash /Users/xxxx/Desktop/crash/InOrder.crash /Users/xxxx/Desktop/crash/InOrder.app.dSYM > Control_symbol.crash
上述命令中,"xxxx"和"InOrder"请自行替换成(电脑名字)和(文件)的名称。运行,这时候终端可能会报错Error: "DEVELOPER_DIR" is not defined at /usr/local/bin/symbolicatecrash line 53. 这时候在终端中再输入如下(Xcode.app依然是要替换成实际名称)
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer”
然后再跑一下刚刚的那个命令./symbolicatecrash /Users/xxxx/Desktop/crash/InOrder.crash /Users/xxxx/Desktop/crash/InOrder.app.dSYM > Control_symbol.crash
,这时候看一下桌面的crash文件夹下就会多出一个名为“Control_symbol.crash”的文件,这就是可定位问题的crash文件了,我们打开看一下。