自己解析 iOS crash

一直在用友盟做崩溃统计,崩溃数据收集一直没有问题,很突然的某天它提供的解析工具解析不出对应的崩溃数据了。就自己找了下相关的崩溃解析方法,做一下笔记,方便后面自己翻阅。


通过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文件,迅速定位错误代码



自己解析 iOS crash_第1张图片

这是友盟收集到的崩溃信息,怎么处理呢?

根据错误堆栈定位到错误位置

这是未标记错误位置,无基地址的情况。这条调用栈包括下面四部分:

模块号: 这里是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

如图所示:


参考网址:iOS 错误堆栈查找崩溃原因的方法 

你可能感兴趣的:(自己解析 iOS crash)