iOS分析崩潰日志

前言
iOS分析定位崩潰問題有很多種方式,但是發(fā)布到AppStore的應(yīng)用如果崩潰了碘勉,我們該怎么辦呢垄潮?通常我們都會在系統(tǒng)中接入統(tǒng)計系統(tǒng)虫蝶,在系統(tǒng)崩潰的時候記錄下崩潰日志章咧,下次啟動時將日志發(fā)送到服務(wù)端,比較好的第三方有umeng之類的能真。今天我們來講一下通過崩潰日志來分析定位我們的bug赁严。
dYSM文件
分析崩潰日志的前提是我們需要有dYSM文件,這個文件是我們用archive打包時生成的.xcarchive后綴的文件包粉铐。一個良好的習(xí)慣是疼约,在你打包提交審核的時候,將生成的.xcarchive與ipa文件一同拷貝一份蝙泼,按照版本號保存下來程剥,這樣如果線上出現(xiàn)問題可以快速的找到你想要的文件來定位你的問題。

1482214791250787.png

崩潰日志
一般崩潰日志都會像下面這樣:

NSConcreteMutableAttributedString addAttribute:value:range:: nil value
(null)
((
    CoreFoundation                      0x0000000185c642f4 <redacted> + 160
    libobjc.A.dylib                     0x00000001974880e4 objc_exception_throw + 60
    CoreFoundation                      0x0000000185c64218 <redacted> + 0
    Foundation                          0x0000000186a9dfb4 <redacted> + 152
    Xmen                                0x10073fb30 Xmen + 7600944
    Xmen                                0x1006bbbf4 Xmen + 7060468
    UIKit                               0x000000018a9a47fc <redacted> + 60
    UIKit                               0x000000018a9a512c <redacted> + 104
    UIKit                               0x000000018a6b2b6c <redacted> + 88
    UIKit                               0x000000018a9a4fd4 <redacted> + 444
    UIKit                               0x000000018a78e274 <redacted> + 1012
    UIKit                               0x000000018a999aac <redacted> + 2904
    UIKit                               0x000000018a785268 <redacted> + 172
    UIKit                               0x000000018a6a1760 <redacted> + 580
    QuartzCore                          0x0000000189fe9e1c <redacted> + 152
    QuartzCore                          0x0000000189fe4884 <redacted> + 320
    QuartzCore                          0x0000000189fe4728 <redacted> + 32
    QuartzCore                          0x0000000189fe3ebc <redacted> + 276
    QuartzCore                          0x0000000189fe3c3c <redacted> + 528
    QuartzCore                          0x0000000189fdd364 <redacted> + 80
    CoreFoundation                      0x0000000185c1c2a4 <redacted> + 32
    CoreFoundation                      0x0000000185c19230 <redacted> + 360
    CoreFoundation                      0x0000000185c19610 <redacted> + 836
    CoreFoundation                      0x0000000185b452d4 CFRunLoopRunSpecific + 396
    GraphicsServices                    0x000000018f35b6fc GSEventRunModal + 168
    UIKit                               0x000000018a70afac UIApplicationMain + 1488
    Xmen                                0x1008cf9c0 Xmen + 9238976
    libdyld.dylib                       0x0000000197b06a08 <redacted> + 4
)
dSYM UUID: 30833A40-0F40-3980-B76B-D6E86E4DBA85
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: Xmen
Base Address: 0x000000010007c000</redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted></redacted>

是不是看的一臉懵逼汤踏,下面我來教大家如何結(jié)合crash log 與 dYSM文件 來分析定位出代碼崩潰在哪一個文件的哪一行代碼

提取崩潰日志中有用的信息

  1. NSConcreteMutableAttributedString addAttribute:value:range:: nil value 崩潰的原因是value為nil
  1. " 4 Xmen 0x10073fb30 Xmen + 7600944" 它指出了應(yīng)用名稱织鲸,崩潰時的調(diào)用方法的地址,文件的地址以及方法所在的行的位置溪胶,我們需要的是這一個:"0x10073fb30"昙沦。
  2. "dSYM UUID: 30833A40-0F40-3980-B76B-D6E86E4DBA85"。
  3. "CPU Type: arm64"载荔。

開始分析

  1. 打開終端進入到你的dYSM文件的目錄下面:cd /Dandy/XMEN/上線版本/2.0.17_105/aaaa.xcarchive/dSYMs
  1. 驗證下崩潰日志中的UUID與本地的dYSM文件是否是相匹配的:"Xmen"為你的app名稱dwarfdump --uuid Xmen.app.dSYM結(jié)果是:
UUID: BFF6AE00-8B5F-39BD-AFD0-27707C489B25 (armv7) Xmen.app.dSYM/Contents/Resources/DWARF/Xmen
UUID: 30833A40-0F40-3980-B76B-D6E86E4DBA85 (arm64) Xmen.app.dSYM/Contents/Resources/DWARF/Xmen
  1. 發(fā)現(xiàn)與我們?nèi)罩局械?UUID和CPU Type是相匹配的

查找錯誤信息

  1. dwarfdump --arch=arm64 --lookup 0x10073fb30 /Dandy/XMEN/上線版本/2.0.17_105/aaaa.xcarchive/dSYMs/Xmen.app.dSYM/Contents/Resources/DWARF/Xmen
  2. "arm64"與"0x1008cf9c0"分別對應(yīng)于上面我們從日志中提取出來的有用信息
    "/Dandy/XMEN/上線版本/2.0.17_105/aaaa.xcarchive/dSYMs/Xmen.app.dSYM/Contents/Resources/DWARF/Xmen"對應(yīng)于你本地dYSM文件目錄
  3. "Xmen"對應(yīng)于你的app名稱
    結(jié)果像下面這樣:
File: /Dandy/XMEN/上線版本/2.0.17_105/aaaa.xcarchive/dSYMs/Xmen.app.dSYM/Contents/Resources/DWARF/Xmen (arm64)
Looking up address: 0x000000010073fb30 in .debug_info... found!
0x00219b05: Compile Unit: length = 0x00003dd0  version = 0x0002  abbr_offset = 0x00000000  addr_size = 0x08  (next CU at 0x0021d8d9)
0x00219b10: TAG_compile_unit [107] *
AT_producer( "Apple LLVM version 8.0.0 (clang-800.0.42.1)" )
AT_language( DW_LANG_ObjC )
AT_name( "/Dandy/checkSvn/IOS/xmen/Xmen/Modules/StoreManage/SellerOrder/View/DSSellerOrderSectionHeaderView.m" )
AT_stmt_list( 0x001272a9 )
AT_comp_dir( "/Dandy/checkSvn/IOS/xmen" )
AT_APPLE_major_runtime_vers( 0x02 )
AT_low_pc( 0x000000010072b8ac )
AT_high_pc( 0x000000010074e350 )
0x0021aec5:    TAG_subprogram [119] *
AT_low_pc( 0x0000000100739810 )
AT_high_pc( 0x000000010074006c )
AT_frame_base( reg29 )
AT_object_pointer( {0x0021aee3} )
AT_name( "-[DSSellerOrderSectionHeaderView updateContentWithOrderData:isEdit:]" )
AT_decl_file( "/Dandy/checkSvn/IOS/xmen/Xmen/Modules/StoreManage/SellerOrder/View/DSSellerOrderSectionHeaderView.m" )
AT_decl_line( 248 )
AT_prototyped( 0x01 )
0x0021af36:        TAG_lexical_block [138] *
AT_ranges( 0x00008640
[0x000000010073cf90 - 0x000000010073fb88)
[0x000000010073fbc0 - 0x000000010073fbc4)
End )
Line table dir : '/Dandy/checkSvn/IOS/xmen/Xmen/Modules/StoreManage/SellerOrder/View'
Line table file: 'DSSellerOrderSectionHeaderView.m' line 680, column 9 with start address 0x000000010073faf8
Looking up address: 0x000000010073fb30 in .debug_frame... not found.

我們來從終端結(jié)果來分析出我們想要的結(jié)果:
這一行告訴我們崩潰的代碼所在的文件的目錄

Line table dir : '/Dandy/checkSvn/IOS/xmen/Xmen/Modules/StoreManage/SellerOrder/View'

這一行告訴我們崩潰代碼所在的具體文件

AT_decl_file( "/Dandy/checkSvn/IOS/xmen/Xmen/Modules/StoreManage/SellerOrder/View/DSSellerOrderSectionHeaderView.m" )

這一行告訴我們崩潰代碼是在哪一個方法里面

AT_name( "-[DSSellerOrderSectionHeaderView updateContentWithOrderData:isEdit:]" )

這一行告訴我們崩潰代碼具體在哪一行了

Line table file: 'DSSellerOrderSectionHeaderView.m' line 680, column 9 with start address 0x000000010073faf8

好的,現(xiàn)在我們分析到了崩潰代碼在哪一行了采桃,下面我們來找一找bug
查找bug
我們的代碼都應(yīng)該有托管平臺懒熙,每個版本上線都需要打一個tag,這是一個好習(xí)慣普办。下面我拉下我崩潰的對應(yīng)版本的tag工扎,找到崩潰代碼那一行:

結(jié)合崩潰日志中告訴我:崩潰的原因是value為nil,發(fā)現(xiàn)是因為receiverTelephone字段中有中文導(dǎo)致轉(zhuǎn)url時為nil導(dǎo)致的,下面的解bug就看各自本領(lǐng)啦衔蹲。

結(jié)語
希望對您有幫助肢娘,謝謝支持~

原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呈础,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子橱健,更是在濱河造成了極大的恐慌而钞,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拘荡,死亡現(xiàn)場離奇詭異臼节,居然都是意外死亡,警方通過查閱死者的電腦和手機珊皿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門网缝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蟋定,你說我怎么就攤上這事粉臊。” “怎么了驶兜?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵扼仲,是天一觀的道長。 經(jīng)常有香客問我促王,道長犀盟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任蝇狼,我火速辦了婚禮阅畴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迅耘。我一直安慰自己贱枣,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布颤专。 她就那樣靜靜地躺著纽哥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栖秕。 梳的紋絲不亂的頭發(fā)上春塌,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音簇捍,去河邊找鬼只壳。 笑死,一個胖子當(dāng)著我的面吹牛暑塑,可吹牛的內(nèi)容都是我干的吼句。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼事格,長吁一口氣:“原來是場噩夢啊……” “哼惕艳!你這毒婦竟也來了搞隐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤远搪,失蹤者是張志新(化名)和其女友劉穎劣纲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體终娃,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡味廊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棠耕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片余佛。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖窍荧,靈堂內(nèi)的尸體忽然破棺而出辉巡,到底是詐尸還是另有隱情,我是刑警寧澤蕊退,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布郊楣,位于F島的核電站,受9級特大地震影響瓤荔,放射性物質(zhì)發(fā)生泄漏净蚤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一输硝、第九天 我趴在偏房一處隱蔽的房頂上張望今瀑。 院中可真熱鬧,春花似錦点把、人聲如沸橘荠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哥童。三九已至,卻和暖如春褒翰,著一層夾襖步出監(jiān)牢的瞬間贮懈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工优训, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朵你,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓型宙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親伦吠。 傳聞我的和親對象是個殘疾皇子妆兑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前言 iOS分析定位崩潰問題有很多種方式魂拦,但是發(fā)布到AppStore的應(yīng)用如果崩潰了,我們該怎么辦呢搁嗓?通常我們都會...
    xh_0129閱讀 396評論 2 2
  • 本文就捕獲iOS Crash芯勘、Crash日志組成、Crash日志符號化腺逛、異常信息解讀荷愕、常見的Crash五部分介紹。...
    xukuangbo_閱讀 1,581評論 0 0
  • 今天第一次跑半馬棍矛, 13公里安疗,左腳第二拇指與大拇指摩擦起泡,略痛够委。后面的路程都是半跑荐类,半走,上身衣服全部濕了茁帽。中途...
    愛新覺羅達摩閱讀 759評論 0 0
  • 寫祖父的第一個故事時候玉罐,都覺得顯得略微素了些,我會加油的潘拨,我祖父的故事吊输,都是些真實的故事,最后希望大家點下關(guān)注這些...
    平野綾丶閱讀 798評論 1 3
  • 設(shè)計師職業(yè)病狰闪,大概就是出門看到好看的海報會忍不住去分析構(gòu)圖配色等等疯搅,看見好看的照片就忍不住想做成海報_(:з)∠)...
    三千燼閱讀 450評論 2 9