iOS 用symbolicatecrash符号化崩溃日志中系统库
说明
现在已经有很多第三方平台支持解析crash日志中的系统方法了,比如bugly。但是万一遇到情况特殊或者公司要求,还是走上传崩溃日志到自己的服务器,然后自己去定期解析的话,就需要用到symbolicatecrash这个工具了。
指令操作均在终端中进行。
另外,每次打包上架提交审核的时候,把对应的.xcarchive与ipa文件一同拷贝一份,按照版本号保存下来是个好习惯。
1.前期准备工作
前期准备工作只需要在第一次尝试解析的时候进行,如果可以成功执行最终的命令行解析日志就不需要重复执行。
<1>确定Xcode路径
执行如下指令
xcode-select --print-path
目的:确保Xcode路径存在。如果路径中有空格的存在,请把空格去掉。比如如果Xcode 的名字是“Xcode 9.2”
请修改成“Xcode9.2”
或者“Xcode”
。否则后面你会遇到很多稀奇古怪的错误。
修改方法:应用程序→Xcode→重命名
<2>添加Xcode路径
如果Xcode路径已经存在,或者不需要修改,请跳过这一步。注意如果改过Xcode应用的名字也需要进行这一步操作
执行如下指令
sudo xcode-select -s 路径
路径部分直接把Xcode应用内Developer
文件夹拖拽进去会自动生成。
Developer文件夹:应用程序→Xcode→右键,显示包内容→Contents文件夹→Developer
<3>确定Xcode command line tools是否安装
执行如下指令
xcode-select --install
如果输出以下内容说明已经安装,否则根据提示安装即可。
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
2.解析准备工作
解析所需文件
解析崩溃日志需要三个文件
①.崩溃日志文件(通常为.crash如果服务器上面是.txt也没关系,直接下下来把尾缀改成.crash就行)
②.产生崩溃日志的app包对应的.dSYM符号表(注意符号表和包一定要匹配。否则,堆栈方法会错乱)
③.崩溃分析工具symbolicatecrash(Xcode自带)
.dSYM符号表的获取:Xcode→window→organizer 选择Archives→选择想要解析崩溃日志的App包→右键,show in finder→右键(.xcarchive),显示包内容→dSYMs→xxx.app.dSYM
如果自己这里没有app打包文件就只有跟打包的同事要。
symbolicatecrash的获取:应用程序(Applications)→Xcode→右键,显示包内容→Contents→SharedFrameworks→DVTFoundation.framework→Versions→A→Resources→symbolicatecrash
tips:如果到了DVTFoundation.framework这里打不开下一步了,选择如下浏览方式即可。
image.png
3.解析日志
<1>将上述三个文件放在一个文件夹内
文件夹名称可以任意起,路径随意但最好不要出现中文。
image.png<2>在终端中进入该文件夹内
直接拖拽文件夹到路径部分会自动生成
cd 路径
<3>解析日志
./symbolicatecrash ./*.crash ./*.app.dSYM>symbol.crash
这个方法一次只能解析一个日志文件,然后输出一个解析过后的symbol.crash日志文件(会覆盖之前存在的symbol.crash),这个输出的日志文件就是我们可以直接阅读的日志文件。symbol部分可以任意修改成其他名字。
如果要解析多个日志文件,需要逐一将文件夹内的日志文件替换。或者将所有需要解析的日志文件全部放在文件夹内,但是每次指定需要解析的.crash文件。
如果出现下面类似的错误,报错无法执行
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line xx(数字).
执行指令
export DEVELOPER_DIR=Xcode Developer文件夹路径
像上面一样把Developer文件夹拖拽到等号后面路径部分就行,然后再执行解析指令就不会报错了。
<4>查看解析结果
image.png可以看到最下面app部分的方法已经解析出来了(main),但是系统的仍然没有解析。那是因为Xcode中没有这个日志中提到的8.3(12F70)这个固件的系统符号文件,否则这里就会把系统方法的调用堆栈一并解析成可读的格式。而symbolicatecrash解析日志是依赖于Xcode 的,所以我们就要找到日志对应CPU架构下对应版本的系统固件符号文件添加进Xcode。
<5>给Xcode添加对应固件的符号文件
①.下载对应固件符号文件
这个需要结合崩溃日志的信息来,比如这里日志中提到崩溃发生的固件是8.3(12F70)我们就要去找这个固件的符号文件,找的时候还要注意是否区分了CPU架构。下载地址放在后面
②.下载完成后添加进Xcode
打开Finder:点击菜单前往→前往文件夹→输入
~/Library/Developer/Xcode/iOS DeviceSupport
→前往
将下载好的符号文件放入定位到的路径里面。
image.png③.再次解析日志文件
image.png<6>固件符号文件下载地址
首先感谢iOS Crash分析必备:符号化系统库方法作者的无私分享。该文章的作者收集了几乎所有固件的符号文件并分享了出来,为了尊重原作者这里就不放下载地址了。大家可以在他的文章当中找到下载地址,以及目前收集了哪些固件符号文件。