前言:
有很多公司利用友盟來統(tǒng)計(jì)錯(cuò)誤崩潰日志,方便開發(fā)人員查找錯(cuò)誤的位置,但是反饋的日志是無(wú)法確定到底是哪里發(fā)生崩潰的戒财,那么我們?nèi)绾稳ゲ槟赝δ颍渴紫任覀兛聪掠衙藞?bào)錯(cuò)的信息:
Paste_Image.png
單看友盟日志夜涕,是看不出來到底在哪里崩潰的。不過日志中有了崩潰的地址募逞,我們可以通過命令查出來到底是哪個(gè)類哪一行哪一列出現(xiàn)的崩潰越败。
查找dYSM文件:
dYSM是打包的時(shí)候生成的,查找位置可以用下面的方法拆祈,找到它就可以拿友盟統(tǒng)計(jì)上的錯(cuò)誤日志來查找崩潰在程序的哪個(gè)類哪行代碼了恨闪。不過,這不是絕對(duì)的放坏,有的日志是查不到崩潰在何處的咙咽。Xocde-->preference -->
Paste_Image.png
在友盟統(tǒng)計(jì)上,錯(cuò)誤日志這里會(huì)有應(yīng)用的版本號(hào)淤年,我們要根據(jù)這個(gè)版本號(hào)钧敞,找到我們對(duì)應(yīng)的ipa包,然后找到dYSM文件麸粮。在錯(cuò)誤日志的下位溉苛,有出錯(cuò)的版本號(hào),出錯(cuò)的次數(shù)弄诲,出錯(cuò)的首次日期愚战,最后一次出現(xiàn)的日期。即可得到DYSM文件的位置:
/Users/zhoujunbo/Library/Developer/Xcode/Archives/2016-06-21/SSPendi\ 16-6-21\ 下午2.23.xcarchive
-然后
Paste_Image.png
接下來繼續(xù)進(jìn)入
Paste_Image.png
Paste_Image.png
Paste_Image.png
最后進(jìn)入文件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
解析友盟錯(cuò)誤信息重要指令:
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是友盟報(bào)錯(cuò)的地址,我們只需要把地址換為自己app的地址即可,然后敲回車,終端就會(huì)顯示這樣一串信息
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列崩潰的凤巨,就可以直接定位到錯(cuò)誤的地方,然后分析出錯(cuò)的代碼洛搀,fix掉就可以了敢茁。
ps:將項(xiàng)目 Build Settings -> Build Options -> Debug Information Format 中, 置為了 DWARF留美,如果選為DWARF則不會(huì)產(chǎn)生dSYM文件彰檬,必須選擇DWARF with dSYM File才會(huì)生成符號(hào)表文件。
原文作者:CoderBob鏈接:http://www.reibang.com/p/115ef29b2c90