美文网首页
【iOS】crash 解析

【iOS】crash 解析

作者: Kean_Qi | 来源:发表于2021-11-01 10:13 被阅读0次

    近日在使用友盟统计的时候,一个crash的寻找其原始地址经历,做一次记录。


    image.png

    上图是错误日志的虚拟内存地址,对于如何通过虚拟地址找到对应错误方法,我做如下几条总结:

    一、找到xcode自带工具symbolicatecrash

    # 查找本地symbolicatecrash
    find /Applications/Xcode.app -name symbolicatecrash -type f
    # 结果如下
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/iOSSupport/Library/PrivateFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
    

    二、复制symbolicatecrash工具到自定义文件夹 将应用到xxx.app.dSYM放入该文件夹

    xxx.app.dSYM为具有调试信息的目标文件,可以通过dSYM经过解析还原错误的代码位置

    三解析过程

    # 错误虚拟地址
     0x00000001045038a4 xxxx + 3848356
    # 虚拟地址16进制转10 进制
    printf %d 0x00000001045038a4
    # 结果如下
    4367333540
    # 虚拟地址与偏移量进行相加
    expr  4367333540 + 3848356
    # 结果
    4371181896
    #将计算的十进制结果再转16进制
    printf "%X\n" 4371181896
    # 结果
    1048AF148
    # 通过atos [-arch 架构名] [-o 符号表] [-l 模块地址] [方法地址] 命令找到错误方法
    xcrun atos -arch arm64 -o ./xxx.app.dSYM/Contents/Resources/DWARF/xxx -l 0x00000001045038a4 1048AF148 
    #得到发生错误的方法
    +[IFABlurryView screenShot] (in xxx) (IFABlurryView.m:61)
    #然后找到对应错误并解决问题
    

    其中atos [-arch 架构名] [-o 符号表] [-l 模块地址] [方法地址] 命令的模块地址是对于错误的虚拟内存地址

    .crash文件解析

    如果有.crash 文件
    解析过程如下:

    
    ./symbolicatecrash ./crash.crash ./xxx.app.dSYM > crash_xxx.crash
    
    如果无法解析,执行命令
    export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
    
    结果如下:
    +[IFABlurryView screenShot] (in xxx) (IFABlurryView.m:61)
    +[IFABlurryView blurImage] (in xxx) (IFABlurryView.m:49)
    -[IFABlurryView init] (in xxx) (IFABlurryView.m:33)
    -[IFARootNavigationController resignActive] (in xxx) (IFARootNavigationController.m:79)
    

    相关文章

      网友评论

          本文标题:【iOS】crash 解析

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