美文网首页
iOS DYSM分析友盟错误信息无标题文章

iOS DYSM分析友盟错误信息无标题文章

作者: ShanJiJi | 来源:发表于2017-09-21 10:00 被阅读57次

    前言:
    有很多公司利用友盟来统计错误崩溃日志,方便开发人员查找错误的位置,但是反馈的日志是无法确定到底是哪里发生崩溃的,那么我们如何去查呢?首先我们看下友盟报错的信息:


    Paste_Image.png

    单看友盟日志,是看不出来到底在哪里崩溃的。不过日志中有了崩溃的地址,我们可以通过命令查出来到底是哪个类哪一行哪一列出现的崩溃。
    查找dYSM文件:
    dYSM是打包的时候生成的,查找位置可以用下面的方法,找到它就可以拿友盟统计上的错误日志来查找崩溃在程序的哪个类哪行代码了。不过,这不是绝对的,有的日志是查不到崩溃在何处的。Xocde-->preference -->

    Paste_Image.png

    Paste_Image.png

    友盟统计上,错误日志这里会有应用的版本号,我们要根据这个版本号,找到我们对应的ipa包,然后找到dYSM文件。在错误日志的下位,有出错的版本号,出错的次数,出错的首次日期,最后一次出现的日期。即可得到DYSM文件的位置:
    /Users/zhoujunbo/Library/Developer/Xcode/Archives/2016-06-21/SSPendi\ 16-6-21\ 下午2.23.xcarchive

    -然后


    Paste_Image.png

    接下来继续进入

    Paste_Image.png

    Paste_Image.png

    Paste_Image.png

    最后进入文件cd /Users/zhoujunbo/Library/Developer/Xcode/Archives/2016-06-21/SSPendi\ 16-6-21\ 下午2.23.xcarchive/dSYMs/SSPendi.app.dSYM/Contents/Resources/DWARF/SSPendi

    解析友盟错误信息重要指令:
    dwarfdump --arch=arm64 --lookup 0x1001edbc4 /Users/zhoujunbo/Library/Developer/Xcode/Archives/2016-06-21/SSPendi\ 16-6-21\ 下午2.23.xcarchive/dSYMs/SSPendi.app.dSYM/Contents/Resources/DWARF/SSPendi

    0x1001edbc4是友盟报错的地址,我们只需要把地址换为自己app的地址即可,然后敲回车,终端就会显示这样一串信息

    0x003ab47e: Compile Unit: length = 0x000026ba  version = 0x0002  abbr_offset = 0x00000000  addr_size = 0x08  (next CU at 0x003adb3c)
    
    0x003ab489: TAG_compile_unit [1] *
                 AT_producer( "Apple LLVM version 7.3.0 (clang-703.0.31)" )
                 AT_language( DW_LANG_ObjC )
                 AT_name( "/Users/zhoujunbo/Documents/SVN/SSPendi/ECSDKDemo_OC/Custom/DB/IMCommon.m" )
                 AT_stmt_list( 0x00121122 )
                 AT_comp_dir( "/Users/zhoujunbo/Documents/SVN/SSPendi" )
                 AT_APPLE_optimized( 0x01 )
                 AT_APPLE_major_runtime_vers( 0x02 )
                 AT_low_pc( 0x00000001001ed7a0 )
                 AT_high_pc( 0x00000001001ee82c )
    
    0x003ac6f2:     TAG_subprogram [35] *
                     AT_low_pc( 0x00000001001edb14 )
                     AT_high_pc( 0x00000001001edc44 )
                     AT_frame_base( reg29 )
                     AT_object_pointer( {0x003ac711} )
                     AT_name( "-[IMMessageObj dealloc]" )
                     AT_decl_file( "/Users/zhoujunbo/Documents/SVN/SSPendi/ECSDKDemo_OC/Custom/DB/IMCommon.m" )
                     AT_decl_line( 64 )
                     AT_prototyped( 0x01 )
                     AT_APPLE_optimized( 0x01 )
    Line table dir : '/Users/zhoujunbo/Documents/SVN/SSPendi/ECSDKDemo_OC/Custom/DB'
    Line table file: 'IMCommon.m' line 74, column 10 with start address 0x00000001001edbc4
    

    然后,我们可以分析得到是在IMCommon.m文件中的第74行第10列崩溃的,就可以直接定位到错误的地方,然后分析出错的代码,fix掉就可以了。

    ps:将项目 Build Settings -> Build Options -> Debug Information Format 中, 置为了 DWARF,如果选为DWARF则不会产生dSYM文件,必须选择DWARF with dSYM File才会生成符号表文件。

    原文作者:CoderBob链接:http://www.jianshu.com/p/115ef29b2c90

    相关文章

      网友评论

          本文标题:iOS DYSM分析友盟错误信息无标题文章

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