一直在用友盟做崩溃统计,崩溃数据收集一直没有问题,很突然的某天它提供的解析工具解析不出对应的崩溃数据了。就自己找了下相关的崩溃解析方法,做一下笔记,方便后面自己翻阅。
通过dSYM文件分析crash日志
从iOS8开始,系统可以开始帮助我们收集应用的崩溃日志,但前提是用户同意“与应用开发者分享”,可以在“设置-》隐私-》诊断与用量-应用开发者共享”中进行打开或关闭。
Xcode 自带的崩溃分析工具:Symbolicatecrash
1>.首先找到symbolicatecrash所在目录路径
xcode6.0以前的位置:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources
xcode6.0以后的位置:/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
2>.找到app对应的.dSYM 文件
在“Xcode-》Window-》Organizer”中可以找到响应的dsym和crash文件。
首先找到最后一次打包提交appstore的archive文件,显示包内容,app对应的.dSYM文件就在dSYMs文件夹中
3>.将 projectName.app.dSYM 文件 和 crash 日志文件放在同一个目录中
4>.打开Terminal,并且定位到.dSYM文件和.crash文件所在的文件夹
5>.在终端中输入 export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
6>.继续输入 symbolicatecrash路径/symbolicatecrash crashFile.crash projectName.app.dSYM > crash.txt
7>.打开目录中的crash.txt文件,迅速定位错误代码
这是友盟收集到的崩溃信息,怎么处理呢?
根据错误堆栈定位到错误位置
这是未标记错误位置,无基地址的情况。这条调用栈包括下面四部分:
模块号: 这里是4
二进制库名: 这里是 TalentService
调用方法的地址: 这里是 0x1002c28f4
第四部分为偏移地址,偏移地址为 710956。
将0x1002c28f4
转为10进制是4297861364,4297861364-710956 = 4297150408
再转为16进制为 0想00214fc8,这个就是基地址了。
找到xcarchive文件打开,显示包内容,将里面的“Products->Applications->文件”和”dSYMs->文件“保存到一个新的文件夹中。
打开终端,进入这个新文件夹下,输入如下命令就可以得到崩溃信息
atos -arch arm64 -o TalentService.app/TalentService -l 0x100214fc8 0x1002c28f4
如图所示: