Crash 日志 簡(jiǎn)單分析 縮小查找范圍

看懂 Crash 日志

QQ20220127-155704@2x.png

Crash 頭部信息

  • Incident Identifier:每個(gè) Crash 生成的唯一的 uuid.

  • CrashReporter Key:CrashReporter 的 uuid, 如果自己捕獲日志,這個(gè)可以忽略慨飘。

  • Hardware Model:機(jī)型

  • Process:進(jìn)程名和進(jìn)程ID

  • Path:進(jìn)程的可執(zhí)行文件路徑

  • Identifier:Info.plist 中配置的 CFBundleIdentifier 值

  • Version: CFBundleVersion (CFBundleVersionShort) 即應(yīng)用的Build號(hào)+版本號(hào)

  • Code Type:機(jī)型的 CPU 架構(gòu)芋膘,但是不是詳細(xì)的架構(gòu)名芬为。比如 arm64e 在這里也是 ARM-64

  • Parent Process:父進(jìn)程和進(jìn)程ID

  • Data/Time: Crash發(fā)生的具體時(shí)間唠梨。

  • Launch Time: 進(jìn)程啟動(dòng)時(shí)間

  • OS Version: iOS 系統(tǒng)版本和 build號(hào)

  • Report Version: Crash日志格式的版本號(hào)封豪,一般是 104炫隶。如果這個(gè)version偏高洞辣,用系統(tǒng)的symbolicatecrash命令不能符號(hào)化日志叉存,一般如果看到是204码俩, 改成104之后用symbolicatecrash就可以符號(hào)化了

Crash 異常碼

在 Crash 頭部信息之下, 會(huì)有個(gè)段記錄了 Crash 異常碼。類(lèi)似下圖:


QQ20220127-161057@2x.png

這里我們應(yīng)該關(guān)注:

  • Exception Type:異常碼歼捏,一般格式是 Mach異常碼 ( UNIX 信號(hào)類(lèi)型 )

  • Exception Subtype:一般情況里面帶的是 Mach異常的 subcode, 還有 Crash 相關(guān)地址信息稿存。

  • Triggered by Thread:發(fā)生Crash的線(xiàn)程,大部分情況到這個(gè)線(xiàn)程的堆棧里面去看 Crash 堆棧瞳秽。

  • Application Specific Information:如果是 Objc/c++ Exception 異常瓣履,這里是異常的信息,這個(gè)是定位異常的關(guān)鍵信息

  • Last Exception Backtrace:拋出異常的代碼堆棧, 如果是 Objc/c++ Exception 異常造成的 Crash练俐,就看這個(gè)堆棧袖迎,Crashed Thread: 里的堆棧是 abort(),沒(méi)有意義腺晾。

附異常碼的解釋, 非所有異常碼燕锥,只是我們 Crash 中可能會(huì)看到的 :

Mach 異常 簡(jiǎn)介 使用場(chǎng)景
EXC_BAD_ACCESS (SIGBUS) 總線(xiàn)錯(cuò)誤 1、內(nèi)存地址對(duì)齊出錯(cuò) 2悯蝉、試圖執(zhí)行沒(méi)有執(zhí)行權(quán)限的代碼地址
SIGSEGV 段錯(cuò)誤 1归形、訪問(wèn)未申請(qǐng)的虛擬內(nèi)存地址 2、沒(méi)有寫(xiě)權(quán)限的內(nèi)存寫(xiě)入
EXC_BAD_INSTRUCTION (SIGILL) 非法指令鼻由,即機(jī)器碼指令不正確 1, iOS 上偶現(xiàn)的問(wèn)題暇榴,遇到之后用戶(hù)會(huì)連續(xù)閃退厚棵,直到應(yīng)用二進(jìn)制的緩存重新加載 或重啟手機(jī)。此問(wèn)題挺影響體驗(yàn)蔼紧,但是報(bào)給蘋(píng)果不認(rèn)婆硬,因?yàn)樘O(píng)果那邊沒(méi)有收集到,目前沒(méi)有太好辦法奸例。因?yàn)?iOS 應(yīng)用內(nèi)無(wú)法對(duì)一篇內(nèi)存同時(shí)獲取 w+x 權(quán)限的彬犯,因此應(yīng)用無(wú)法造成此類(lèi)問(wèn)題,所以判斷是蘋(píng)果的問(wèn)題哩至。
EXC_ARITHMETIC (SIGFPE) 算術(shù)運(yùn)算出錯(cuò)躏嚎,比如除0錯(cuò)誤 iOS 默認(rèn)是不啟用的蜜自,所以我們一般不會(huì)遇到菩貌。
EXC_SOFTWARE (我們?cè)?Crash 日志中一般不會(huì)看到這個(gè)類(lèi)型,蘋(píng)果的日志里會(huì)是 EXC_CRASH) (SIGSYS) 系統(tǒng)調(diào)用異常 無(wú)
SIGPIPE 管道破裂 1, Socket通信是可能遇到重荠,如讀進(jìn)程以及終止時(shí)箭阶,寫(xiě)進(jìn)程繼續(xù)寫(xiě)入數(shù)據(jù)。2, 根據(jù)蘋(píng)果的文檔戈鲁,我們可以忽略這個(gè)信號(hào)https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/CommonPitfalls/CommonPitfalls.html
SIGABRT abort() 發(fā)生的信號(hào) 典型的軟件信號(hào)仇参,通過(guò) pthread_kill() 發(fā)送
SIGKILL 進(jìn)程內(nèi)無(wú)法攔截 1, exit(), kill(9) 等函數(shù)調(diào)用 2, iOS系統(tǒng)殺進(jìn)程用的,比如 watchDog 殺進(jìn)程
EXC_BREAKPOINT SIGTRAP 由斷點(diǎn)指令或其它trap指令產(chǎn)生 部分系統(tǒng)框架里面會(huì)用 __builtin_trap() 來(lái)產(chǎn)生一個(gè) SIGTRAP 類(lèi)型的 Crash
EXC_GUARD 文件句柄錯(cuò)誤 試圖 close 一個(gè)內(nèi)核的 fd.
EXC_RESOURCE 資源受限 線(xiàn)程調(diào)度太頻繁婆殿,子線(xiàn)程每秒被喚醒次數(shù)超過(guò)150:https://stackoverflow.com/questions/25848441/app-shutdown-with-exc-resource-wakeups-exception-on-ios-8-gm

Crash 堆棧

下面一張圖介紹了 Crash 堆棧中每個(gè)段的含義(在網(wǎng)上找的說(shuō)的挺細(xì)):


1346982-d01e701afe7cdd32.png

Signal信號(hào)的類(lèi)型:

  • SIGABRT–程序中止命令中止信號(hào)
  • SIGALRM–程序超時(shí)信號(hào)
  • SIGFPE–程序浮點(diǎn)異常信號(hào)
  • SIGILL–程序非法指令信號(hào)
  • SIGHUP–程序終端中止信號(hào)
  • SIGINT–程序鍵盤(pán)中斷信號(hào)
  • SIGKILL–程序結(jié)束接收中止信號(hào)
  • SIGTERM–程序kill中止信號(hào)
  • SIGSTOP–程序鍵盤(pán)中止信號(hào)
  • SIGSEGV–程序無(wú)效內(nèi)存中止信號(hào)
  • SIGBUS–程序內(nèi)存字節(jié)未對(duì)齊中止信號(hào)
  • SIGPIPE–程序Socket發(fā)送失敗中止信號(hào)
    SIGABRT
    就crash而言诈乒,SIGABRT是一個(gè)比較好解決的,因?yàn)樗且粋€(gè)可掌控的crash婆芦。App會(huì)在一個(gè)目的地終止怕磨,因?yàn)橄到y(tǒng)意識(shí)到app做了一些他不能支持的事情。
    通常, SIGABRT 異常是由于某個(gè)對(duì)象接收到未實(shí)現(xiàn)的消息引起的消约。 或者肠鲫,用簡(jiǎn)單的話(huà)說(shuō),在某個(gè)對(duì)象上調(diào)用了不存在的方法或粮。
    SIGSEGV
    SIGSEGV程序無(wú)效內(nèi)存中止信號(hào)导饲,一般是表示內(nèi)存不合法,
    SIGBUS
    SIGBUS程序內(nèi)存字節(jié)未對(duì)齊中止信號(hào),

補(bǔ)充常見(jiàn)的Exception Codes代碼類(lèi)型

Exception Codes: 常見(jiàn)代碼有以下幾種
0x8badf00d錯(cuò)誤碼:Watchdog超時(shí),意為“ate bad food”氯材。
0xdeadfa11錯(cuò)誤碼:用戶(hù)強(qiáng)制退出渣锦,意為“dead fall”。
0xbaaaaaad錯(cuò)誤碼:用戶(hù)按住Home鍵和音量鍵氢哮,獲取當(dāng)前內(nèi)存狀態(tài)泡挺,不代表崩潰。
0xbad22222錯(cuò)誤碼:VoIP應(yīng)用(因?yàn)樘l繁命浴?)被iOS干掉娄猫。
0xc00010ff錯(cuò)誤碼:因?yàn)樘珷C了被干掉贱除,意為“cool off”。
0xdead10cc錯(cuò)誤碼:因?yàn)樵诤笈_(tái)時(shí)仍然占據(jù)系統(tǒng)資源(比如通訊錄)被干掉媳溺,意為“dead lock”
異常代碼0x8badf00d指示應(yīng)用程序已終止的iOS 因?yàn)榭撮T(mén)狗超時(shí)發(fā)生月幌,應(yīng)用程序時(shí)間太長(zhǎng)、終止悬蔽,或?qū)ο到y(tǒng)時(shí)間作出相應(yīng)扯躺。一個(gè)常見(jiàn)的原因是做在主線(xiàn)程上的同步聯(lián)網(wǎng)。無(wú)論操作是線(xiàn)程0上蝎困,需要搬到后臺(tái)線(xiàn)程录语,或處理方式不同,所以它不會(huì)阻止在主線(xiàn)程禾乘。

補(bǔ)充常見(jiàn)的Exception Type異常類(lèi)型的信息:

1澎埠、EXC_BAD_ACCESS:此類(lèi)型是最常見(jiàn)的crash, 通常用于訪問(wèn)了不該訪問(wèn)的內(nèi)存導(dǎo)致的,一般EXC_BAD_ACCESS后面的()還會(huì)帶有補(bǔ)充信息
野指針錯(cuò)誤形式在Xcode中通常表現(xiàn)為:Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)錯(cuò)誤。因?yàn)槟阍L問(wèn)了一塊已經(jīng)不屬于你的內(nèi)存始藕。
2蒲稳、SIGSEGV:通常由于重復(fù)釋放對(duì)象導(dǎo)致, 一般在ARC以后很少見(jiàn)到
3、SIGABRT: 收到Abort信號(hào)退出, 通常Foundtion庫(kù)中的容器為了保護(hù)狀態(tài)正常會(huì)做一些檢測(cè), 例如插入nil到數(shù)據(jù)中等會(huì)遇到此類(lèi)錯(cuò)誤.
4伍派、SEGV(Segmentation Violation):代表無(wú)效內(nèi)存地址, 比如空指針, 未初始化指針, 棧溢出等.
5江耀、SIGBUS:總棧錯(cuò)誤, 與SIGSEGV不同的是, SIGSEGV訪問(wèn)的是無(wú)效的地址, 而SIGBUS訪問(wèn)的是有效的地址, 但是總棧訪問(wèn)異常(如地址對(duì)齊問(wèn)題)
6、SIGILL: 嘗試執(zhí)行非法的指令, 可能不被識(shí)別或者沒(méi)有權(quán)限
7诉植、SIGFPE: 數(shù)學(xué)計(jì)算相關(guān)問(wèn)題, 比如除零操作
8祥国、SIGIPIPE: 管道另一端沒(méi)有進(jìn)程接手?jǐn)?shù)據(jù)
9、EXC_BAD_INSTRUCTION:此類(lèi)異常通常由于線(xiàn)程執(zhí)行非法指令導(dǎo)致
10晾腔、EXC_ARITHMETIC:除零錯(cuò)誤會(huì)拋出此類(lèi)異常

Crash 分析方法

請(qǐng)查看網(wǎng)上文章比較詳細(xì):詳細(xì)1 詳細(xì)2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舌稀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子建车,更是在濱河造成了極大的恐慌扩借,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缤至,死亡現(xiàn)場(chǎng)離奇詭異潮罪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)领斥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)嫉到,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人月洛,你說(shuō)我怎么就攤上這事何恶。” “怎么了嚼黔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵细层,是天一觀的道長(zhǎng)惜辑。 經(jīng)常有香客問(wèn)我,道長(zhǎng)疫赎,這世上最難降的妖魔是什么盛撑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮捧搞,結(jié)果婚禮上抵卫,老公的妹妹穿的比我還像新娘。我一直安慰自己胎撇,他們只是感情好介粘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著晚树,像睡著了一般姻采。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上题涨,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天偎谁,我揣著相機(jī)與錄音总滩,去河邊找鬼纲堵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闰渔,可吹牛的內(nèi)容都是我干的席函。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼冈涧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼茂附!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起督弓,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤营曼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后愚隧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒂阱,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年狂塘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了录煤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荞胡,死狀恐怖妈踊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泪漂,我是刑警寧澤廊营,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布歪泳,位于F島的核電站,受9級(jí)特大地震影響露筒,放射性物質(zhì)發(fā)生泄漏夹囚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一邀窃、第九天 我趴在偏房一處隱蔽的房頂上張望荸哟。 院中可真熱鬧,春花似錦瞬捕、人聲如沸鞍历。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)劣砍。三九已至,卻和暖如春扇救,著一層夾襖步出監(jiān)牢的瞬間刑枝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工迅腔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留装畅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓沧烈,卻偏偏與公主長(zhǎng)得像掠兄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锌雀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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