美文网首页Bug调试
自己解析 iOS crash

自己解析 iOS crash

作者: 学习无底 | 来源:发表于2016-03-29 15:06 被阅读83次

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


    通过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

    如图所示:

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

    相关文章

      网友评论

        本文标题:自己解析 iOS crash

        本文链接:https://www.haomeiwen.com/subject/qqdslttx.html