crash之理論分析-一些常見的崩潰原因

理論文章

crash分析攻略:https://mp.weixin.qq.com/s/hVj-j61Br3dox37SN79fDQ

常見崩潰原因分析

分享一些常見的崩潰原因

總覽

可以通過Exception Information和Backtrace迅速判斷出大致崩潰原因挣输。


image.png

有些常見的崩潰都有額外的診斷信息须蜗,這些信息能夠幫助我們進一步排查出問題订讼。

Swift Runtime Error

Swift通過內(nèi)存安全技術來提前捕獲代碼問題雏逾。Swift Runtime Error會有比較鮮明的特征

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
...
Termination Signal: Trace/BPT trap: 5
Termination Reason: Namespace SIGNAL, Code 0x5

在英特爾處理器上,崩潰信如下

Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
...
Exception Note:        EXC_CORPSE_NOTIFY
Termination Signal:    Illegal instruction: 4
Termination Reason:    Namespace SIGNAL, Code 0x4

在堆棧區(qū)域也有相關信息

Thread 0 Crashed:
0   MyCoolApp                         0x0000000100a71a88 @objc ViewController.viewDidLoad() (in MyCoolApp) (ViewController.swift:18)

如何定位解決swift runtime error

Language Exception(OC崩潰)

Apple的系統(tǒng)框架在發(fā)生runtime錯誤的時候會拋出Language Exception狮惜,比如數(shù)組越界等赃承。會有如下特征:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY

同時此類崩潰還有Last Exception Backtrace

Last Exception Backtrace:
0   CoreFoundation                    0x19aae2a48 __exceptionPreprocess + 220
1   libobjc.A.dylib                   0x19a809fa4 objc_exception_throw + 55

如何定位解決Language Exception

watch dog強殺
被watchdog強殺一般崩潰類型是SIGKILL痒谴,同時Termination Reason里面的Code固定為0x8badf00d。

Exception Type:  EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d

如果watchdog強殺是因為app長時間沒有響應箱叁,則可能會有額外信息墅垮。

Termination Description: SPRINGBOARD, 
    scene-create watchdog transgression: application<com.example.MyCoolApp>:667
    exhausted real (wall clock) time allowance of 19.97 seconds 
    | ProcessVisibility: Foreground 
    | ProcessState: Running 
    | WatchdogEvent: scene-create 
    | WatchdogVisibility: Foreground 
    | WatchdogCPUStatistics: ( 
    |  "Elapsed total CPU time (seconds): 15.290 (user 15.290, system 0.000), 28% CPU", 
    |  "Elapsed application CPU time (seconds): 0.367, 1% CPU" 
    | )

如何定位解決watchdog強殺

訪問僵尸對象導致的崩潰
訪問僵尸對象的,意思是說給已經(jīng)dealloc的對象發(fā)送消息耕漱。給已經(jīng)析構的對象發(fā)送消息會發(fā)生 objc_msgSend, objc_retain, or objc_release類似這種崩潰算色。

Thread 0 Crashed:
0   libobjc.A.dylib                   0x00000001a186d190 objc_msgSend + 16
1   Foundation                        0x00000001a1f31238 __NSThreadPerformPerform + 232
2   CoreFoundation                    0x00000001a1ac67e0 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24

另外一種情況也可能代表是訪問了僵尸對象,這時候會有Last Exception Backtrace信息

Last Exception Backtrace:
0   CoreFoundation                    0x1bf596a48 __exceptionPreprocess + 220
1   libobjc.A.dylib                   0x1bf2bdfa4 objc_exception_throw + 55
2   CoreFoundation                    0x1bf49a5a8 -[NSObject+ 193960 (NSObject) doesNotRecognizeSelector:] + 139

如何定位解決訪問僵尸對象問題

Memory Access野指針問題

野指針異常類型一般是EXC_BAD_ACCESS螟够,同時還就會有VM Region Info信息灾梦。

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000
VM Region Info: 0 is not in any region.  Bytes before following region: 4307009536
      REGION TYPE                      START - END             [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      UNUSED SPACE AT START
--->  
      __TEXT                 0000000100b7c000-0000000100b84000 [   32K] r-x/r-x SM=COW  ...pp/MyGreatApp

如何定位解決野指針問題

Framework丟失
如果app運行時發(fā)現(xiàn)缺少framework,會拋出 EXC_CRASH (SIGABRT)異常錯誤碼妓笙,而且你也會收到Termination Description中斷描述若河。

Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Description: DYLD, dependent dylib '@rpath/MyFramework.framework/MyFramework' 
    not found for '<path>/MyCoolApp.app/MyCoolApp', tried but didn't find: 
    '/usr/lib/swift/MyFramework.framework/MyFramework' 
    '<path>/MyCoolApp.app/Frameworks/MyFramework.framework/MyFramework' 
    '@rpath/MyFramework.framework/MyFramework' 
    '/System/Library/Frameworks/MyFramework.framework/MyFramework'
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者寞宫。
  • 序言:七十年代末萧福,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辈赋,更是在濱河造成了極大的恐慌统锤,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炭庙,死亡現(xiàn)場離奇詭異饲窿,居然都是意外死亡,警方通過查閱死者的電腦和手機焕蹄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門逾雄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事鸦泳∫停” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵做鹰,是天一觀的道長击纬。 經(jīng)常有香客問我,道長钾麸,這世上最難降的妖魔是什么更振? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮饭尝,結果婚禮上肯腕,老公的妹妹穿的比我還像新娘。我一直安慰自己钥平,他們只是感情好实撒,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涉瘾,像睡著了一般知态。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上立叛,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天肴甸,我揣著相機與錄音,去河邊找鬼囚巴。 笑死原在,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的彤叉。 我是一名探鬼主播庶柿,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秽浇!你這毒婦竟也來了浮庐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤柬焕,失蹤者是張志新(化名)和其女友劉穎审残,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斑举,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡搅轿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了富玷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片璧坟。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡既穆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雀鹃,到底是詐尸還是另有隱情幻工,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布黎茎,位于F島的核電站囊颅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏傅瞻。R本人自食惡果不足惜踢代,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俭正。 院中可真熱鬧,春花似錦焙畔、人聲如沸掸读。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儿惫。三九已至,卻和暖如春伸但,著一層夾襖步出監(jiān)牢的瞬間肾请,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工更胖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铛铁,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓却妨,卻偏偏與公主長得像饵逐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彪标,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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