淺談 Crash Report

最近給bug搞得焦頭爛額的,也看了不少Crash Report,這里就簡(jiǎn)單的介紹下怎么讀Crash Report,下面以一個(gè)Crash Report為例慨飘, 一步一步解讀:

app 信息:
Incident Identifier: 119A5EDA-7C12-43BB-A1F8-D81BXXXXXXXX
CrashReporter Key:   d7117df4fcbf4a0ca5f374cc70436e46XXXXXXXX
Hardware Model:      iPhone7,2
Process:             應(yīng)用名 [2468]
Path:                /private/var/containers/Bundle/Application/9B528EB4-2D07-433F-ACAA-27A0DD1BD576/應(yīng)用名.app/應(yīng)用名
Identifier:          com.xxx.xxx
Version:             1.810.2 (1.810)
Code Type:           ARM-64 (Native)
Parent Process:      launchd [1]
基本信息
Date/Time:           2016-09-20 11:53:02.02 +0800
Launch Time:         2016-09-20 11:51:48.48 +0800
OS Version:          iOS 9.3.5 (13G36)
Report Version:      105
異常信息(非常重要)
Exception Type:  EXC_CRASH (SIGABRT)   (異常類(lèi)型)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0  (發(fā)生異常的線(xiàn)程號(hào))
back trace (非常非常重要)
Last Exception Backtrace:
0   CoreFoundation                  0x18403adb0 __exceptionPreprocess + 124
1   libobjc.A.dylib                 0x18369ff80 objc_exception_throw + 56
2   CoreFoundation                  0x183f1e708 -[__NSArrayM insertObject:atIndex:] + 808
3   應(yīng)用名                             0x1016ae5f4 -[EventContent getEventToUsernameList] + 340
4   應(yīng)用名                             0x1002e38ec -[ThreadViewModel checkAndGenerateThreadModelDispalyInfo] (ThreadViewModel.m:95)
5   應(yīng)用名                             0x100b70754 -[TableViewCell bindWithViewModel:] (TableViewCell.m:115)
6   應(yīng)用名                             0x100d59ae8 -[ViewController tableView:cellForRowAtIndexPath:] (ViewController.m:361)
7   UIKit                           0x1894f3030 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 692
8   UIKit                           0x1894f3198 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 80
9   UIKit                           0x1894e2298 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2360
10  UIKit                           0x1894f7c64 -[UITableView _performWithCachedTraitCollection:] + 104
······省略部分無(wú)關(guān)重要的內(nèi)容·······
21  CoreFoundation                  0x183fee8fc __CFRunLoopRun + 928
22  CoreFoundation                  0x183f18c50 CFRunLoopRunSpecific + 384
23  GraphicsServices                0x185800088 GSEventRunModal + 180
24  UIKit                           0x189206088 UIApplicationMain + 204
25  應(yīng)用名                             0x1000c8d14 main (main.m:63)
26  libdyld.dylib                   0x183ab68b8 start + 4

發(fā)生Crash時(shí)的線(xiàn)程的Crash調(diào)用棧,從start開(kāi)始洞渔,從下向上調(diào)用套媚,可以看出 API 的調(diào)用順序,最上面的一個(gè)表示拋出異常的位置磁椒。上面中報(bào)的異常是-[__NSArrayM insertObject:atIndex:] + 808,這種情況一般都是兩種可能玫芦,第一是傳了nil浆熔,第二就是數(shù)組越界。你可以看到出現(xiàn)異常的是[EventContent getEventToUsernameList]桥帆,說(shuō)明是EventContent類(lèi)里面的getEventToUsernameList出現(xiàn)了異常医增,然后可以根據(jù)下面的內(nèi)容找出這個(gè)方法調(diào)用的位置,看到這里老虫,基本上就能定位到crash的位置和原因了叶骨。

thread back trace
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x0000000183bd411c __pthread_kill + 8
1   libsystem_pthread.dylib         0x0000000183ca0ef8 pthread_kill + 112
2   libsystem_c.dylib               0x0000000183b45dc8 abort + 140
3   libc++abi.dylib                 0x00000001836793f4 __cxa_bad_cast + 0
4   libc++abi.dylib                 0x0000000183692f60 std::__terminate(void (*)()) + 44
5   libc++abi.dylib                 0x0000000183692b10 __cxa_rethrow + 144
6   libobjc.A.dylib                 0x00000001836a0120 objc_exception_rethrow + 44
7   CoreFoundation                  0x0000000183f18cf8 CFRunLoopRunSpecific + 552
8   GraphicsServices                0x0000000185800088 GSEventRunModal + 180
9   UIKit                           0x0000000189206088 UIApplicationMain + 204
10  應(yīng)用名                             0x00000001000c8d14 main (main.m:63)
11  libdyld.dylib                   0x0000000183ab68b8 start + 4

Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0   libsystem_kernel.dylib          0x0000000183bd54d8 kevent_qos + 8
1   libdispatch.dylib               0x0000000183a987d8 _dispatch_mgr_invoke + 232
2   libdispatch.dylib               0x0000000183a87648 _dispatch_source_invoke + 0

Thread 2 name:  WebThread
Thread 2:
0   libsystem_kernel.dylib          0x0000000183bb8fd8 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x0000000183bb8e54 mach_msg + 72
2   CoreFoundation                  0x0000000183ff0c60 __CFRunLoopServiceMachPort + 196
3   CoreFoundation                  0x0000000183fee964 __CFRunLoopRun + 1032
4   CoreFoundation                  0x0000000183f18c50 CFRunLoopRunSpecific + 384
5   WebCore                         0x0000000187f0a108 RunWebThread(void*) + 456
6   libsystem_pthread.dylib         0x0000000183c9fb28 _pthread_body + 156
7   libsystem_pthread.dylib         0x0000000183c9fa8c _pthread_body + 0
8   libsystem_pthread.dylib         0x0000000183c9d028 thread_start + 4

這里省略~~~~~~  
Crash時(shí)線(xiàn)程的狀態(tài)
Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000000   x1: 0x0000000000000000   x2: 0x0000000000000000   x3: 0x000000014094c361
    x4: 0x0000000183696ba2   x5: 0x000000016fd7b9a0   x6: 0x000000000000006e   x7: 0x0000000000000019
    x8: 0x0000000008000000   x9: 0x0000000004000000  x10: 0x0000000000000001  x11: 0x0000000048088000
   x12: 0x0000000008088000  x13: 0x0000000008088000  x14: 0x00000000ffffffff  x15: 0x00000000fffffffb
   x16: 0x0000000000000148  x17: 0x0000000000000000  x18: 0x0000000000000000  x19: 0x0000000000000006
   x20: 0x00000001a2114000  x21: 0x000000016fd7b9a0  x22: 0x000000013ed112b0  x23: 0x00000001a2120150
   x24: 0x0000000000000001  x25: 0x7a00e65462337053  x26: 0x000000013ed0bbf0  x27: 0x0000000000000000
   x28: 0x0000000000000001  fp: 0x000000016fd7b900   lr: 0x0000000183ca0ef8
    sp: 0x000000016fd7b8e0   pc: 0x0000000183bd411c cpsr: 0x00000000

通常根據(jù) Last Exception Backtrace 就可以獲得到相關(guān)信息,這部分一般不用關(guān)心祈匙。

Crash時(shí)刻App加載的所有的庫(kù)
Binary Images:
0x100084000 - 0x101a63fff 應(yīng)用名 arm64  <7d34c3f838e53c24b17b63a6f6bb3aff> /var/containers/Bundle/Application/9B528EB4-2D07-433F-ACAA-27A0DD1BD576/應(yīng)用名.app/應(yīng)用名
0x120000000 - 0x12002ffff dyld arm64  <a1862e29910f3f069a363730df77dad7> /usr/lib/dyld
0x183620000 - 0x183621fff libSystem.B.dylib arm64  <5bb501a091dc3a22a5544d34a4312de1> /usr/lib/libSystem.B.dylib
0x183624000 - 0x183676fff libc++.1.dylib arm64  <9ec0d9dcf728349582c26a7da72f0364> /usr/lib/libc++.1.dylib
0x183678000 - 0x183697fff libc++abi.dylib arm64  <aaa40b7f52513cf79c6f814b133556a7> /usr/lib/libc++abi.dylib
0x183698000 - 0x183a04fff libobjc.A.dylib arm64  
...略...

第一行是可執(zhí)行文件的信息忽刽,指令集為 arm64天揖,<7d34c3f838e53c24b17b63a6f6bb3aff> 為可執(zhí)行文件的包的 uuid。下面的內(nèi)容就是 crash 時(shí)加載的所有庫(kù)跪帝。

寫(xiě)在最后

其實(shí)我心感覺(jué)挺愧疚的今膊,在iOS SDK 開(kāi)發(fā) -- 入微一星里說(shuō)會(huì)在一兩天內(nèi)更新下一篇文章,結(jié)果拖到現(xiàn)在還沒(méi)有寫(xiě)完伞剑,這個(gè)也是沒(méi)有辦法斑唬,前面也說(shuō)了,給bug搞死了黎泣,每次發(fā)新版恕刘,新功能基本沒(méi)有什么bug出現(xiàn),測(cè)試到的都不知道是那個(gè)朝代遺留下來(lái)的bug~~~~新SDK開(kāi)發(fā)的文章已經(jīng)寫(xiě)了一半抒倚,盡量快更新上來(lái)褐着,有興趣的可以關(guān)注下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衡便,一起剝皮案震驚了整個(gè)濱河市献起,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌镣陕,老刑警劉巖谴餐,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呆抑,居然都是意外死亡岂嗓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)鹊碍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)厌殉,“玉大人,你說(shuō)我怎么就攤上這事侈咕」保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵耀销,是天一觀的道長(zhǎng)楼眷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)熊尉,這世上最難降的妖魔是什么罐柳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮狰住,結(jié)果婚禮上张吉,老公的妹妹穿的比我還像新娘。我一直安慰自己催植,他們只是感情好肮蛹,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布勺择。 她就那樣靜靜地躺著,像睡著了一般蔗崎。 火紅的嫁衣襯著肌膚如雪酵幕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,584評(píng)論 1 312
  • 那天缓苛,我揣著相機(jī)與錄音芳撒,去河邊找鬼。 笑死未桥,一個(gè)胖子當(dāng)著我的面吹牛笔刹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冬耿,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舌菜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了亦镶?” 一聲冷哼從身側(cè)響起日月,我...
    開(kāi)封第一講書(shū)人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缤骨,沒(méi)想到半個(gè)月后爱咬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绊起,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年精拟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虱歪。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜂绎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笋鄙,到底是詐尸還是另有隱情师枣,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布萧落,位于F島的核電站坛吁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铐尚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一哆姻、第九天 我趴在偏房一處隱蔽的房頂上張望宣增。 院中可真熱鬧,春花似錦矛缨、人聲如沸爹脾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灵妨。三九已至解阅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泌霍,已是汗流浹背货抄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朱转,地道東北人蟹地。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像藤为,于是被迫代替她去往敵國(guó)和親怪与。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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