iOS Crash日志字段解析

一显晶、崩潰類型

  • 應(yīng)用層存在bug 娄琉,即OC程序崩潰
    如 數(shù)組越界往果,selector方法沒實現(xiàn)等拋出一系列NSException
    可通過系統(tǒng)API 注冊UncaughtNSException處理函數(shù)捕捉役听,定位比較容易
  • 違反系統(tǒng)規(guī)則而出錯
    如 watchdog超時颓鲜,訪問了不屬于本進程的內(nèi)存地址,用戶強制退出,低內(nèi)存終止等典予,系統(tǒng)拋出unix信號甜滨,但沒有錯誤堆站信息
    可通過注冊信號處理函數(shù)捕捉,但只能補拙有限的幾種類型熙参,定位較困難

二艳吠、Crash日志,幾個重要的關(guān)鍵詞

Crash日志信息
1孽椰、 進程信息

第一部分是閃退進程的相關(guān)信息:

  • Incident Identifier : 是崩潰報告的唯一標識符昭娩。
  • CrashReporter Key: 是與設(shè)備標識相對應(yīng)的唯一鍵值。同一個設(shè)備上同一版本的App發(fā)生Crash時黍匾,該值都是一樣的栏渺。雖然它不是真正的設(shè)備標識符,但也是一個非常有用的情報:如果你看到100個崩潰日志的CrashReporter Key值都是相同的锐涯,或者只有少數(shù)幾個不同的CrashReport值磕诊,說明這不是一個普遍的問題,只發(fā)生在一個或少數(shù)幾個設(shè)備上。
  • Hardware Model :標識設(shè)備類型霎终。 如果很多崩潰日志都是來自相同的設(shè)備類型滞磺,說明應(yīng)用只在某特定類型的設(shè)備上有問題。上面的日志里莱褒,崩潰日志產(chǎn)生的設(shè)備是iPhone 4s击困。
  • Process:代表Crash的進程名稱,通常都是我們的App的名字, []里面是當時進程的ID
  • Path:崩潰文件的路徑
  • Identifier:項目標識符广凸,就是Bundle Id
  • Version:版本號
  • Code Type:當前App的CPU架構(gòu)
  • Parent Process:當前進程的父進程阅茶,由于iOS中App通常都是單進程的,一般父進程都是launchd
2谅海、基本信息

這部分給出了一些基本信息

  • Date/Time:閃退發(fā)生的日期
  • Launch Time:進入應(yīng)用的時間
  • OS Version:設(shè)備的iOS版本
  • Report Version-Crash:日志的格式脸哀,目前基本上都是104,不同的version里面包含的字段可能有不同
3扭吁、異常信息
  • Exception Type:異常的類型撞蜂。
  • Exception Codes :異常錯誤碼
  • Termination Reason:閃退的原因,比如常見的數(shù)組越界啊侥袜,什么的谅摄。
  • Triggered by Thread:出現(xiàn)問題在哪個線程,這個比較重要系馆,首先確定在哪個線程中出了問題送漠,然后再去定位。
4由蘑、線程回溯

這部分提供應(yīng)用中所有線程的回溯日志闽寡。
回溯是閃退發(fā)生時所有活動幀清單。它包含閃退發(fā)生時調(diào)用函數(shù)的清單. 線程調(diào)用的一些堆棧信息尼酿,壓根看不懂爷狈,所有需要進行符號化處理∩亚妫看下面這行日志:

05  UIKit       0x00000001943bd7fc 0x194343000 + 501756
 
它包括四列:
幀編號—— 此處是12涎永。
二進制庫的名稱 ——此處是 UIKit
調(diào)用方法的地址 ——此處是 0x00000001943bd7fc
第四列分為兩個子列,一個基本地址和一個偏移量鹿响。此處是0x194343000 + 501756, 第一個數(shù)字指向文件羡微,第二個數(shù)字指向文件中的代碼行。
5惶我、 二進制映像(Binary Images)

這部分列出了當Crash發(fā)生時被裝載進進程內(nèi)存空間的依賴庫或者模塊


Binary Images

三妈倔、異常類型信息

1、Exception Type

1)EXC_BAD_ACCESS

此類型的Excpetion是我們最長碰到的Crash绸贡,通常用于訪問了不改訪問的內(nèi)存導(dǎo)致盯蝴。一般EXC_BAD_ACCESS后面的"()"還會帶有補充信息毅哗。

  • SIGSEGV: 通常由于重復(fù)釋放對象導(dǎo)致,這種類型在切換了ARC以后應(yīng)該已經(jīng)很少見到了捧挺。
  • SIGABRT: 收到Abort信號退出虑绵,SIGABRT 異常是由于某個對象接收到未實現(xiàn)的消息引起的。
    SEGV:(Segmentation Violation)闽烙,代表無效內(nèi)存地址蒸殿,比如空指針,未初始化指針鸣峭,棧溢出等;
  • SIGBUS:總線錯誤酥艳,與 SIGSEGV 不同的是摊溶,SIGSEGV 訪問的是無效地址,而 SIGBUS 訪問的是有效地址充石,但總線訪問異常(如地址對齊問題)
  • SIGILL:嘗試執(zhí)行非法的指令莫换,可能不被識別或者沒有權(quán)限

2)EXC_BAD_INSTRUCTION

此類異常通常由于線程執(zhí)行非法指令導(dǎo)致

3)EXC_ARITHMETIC

除零錯誤會拋出此類異常

2、Exception Code 異常編碼

前面日至的第3部分找到異常編碼骤铃。有些編碼比較常見拉岁。通常,異常編碼以一些文字開頭惰爬,緊接著是一個或多個十六進制值喊暖,此數(shù)值正是說明閃退根本性質(zhì)的所在。 從這些編碼中撕瞧,可以區(qū)分出閃退是因為程序錯誤陵叽、非法內(nèi)存訪問或者是其他原因

常見的異常編碼:

  • 0xbaaaaaad 此種類型的log意味著該Crash log并非一個真正的Crash,它僅僅只是包含了整個系統(tǒng)某一時刻的運行狀態(tài)丛版。通彻簦可以通過同時按Home鍵和音量鍵,可能由于用戶不小心觸發(fā)
  • 0xbad22222 當VOIP(指在 IP 網(wǎng)絡(luò)上使用 IP 協(xié)議以數(shù)據(jù)包的方式傳輸語音)程序在后臺太過頻繁的激活時页畦,系統(tǒng)可能會終止此類程序
  • 0x8badf00d 程序啟動或者恢復(fù)時間過長被watch dog終止胖替,通常是應(yīng)用花費太多時間而無法啟動、終止或響應(yīng)用系統(tǒng)事件
  • 0xc00010ff 程序執(zhí)行大量耗費CPU和GPU的運算豫缨,導(dǎo)致設(shè)備過熱独令,觸發(fā)系統(tǒng)過熱保護被系統(tǒng)終止
  • 0xdead10cc 程序退到后臺時還占用系統(tǒng)資源,如通訊錄被系統(tǒng)終止
  • 0xdeadfa11 程序無響應(yīng)好芭,用戶強制關(guān)閉

(注意: 在后臺任務(wù)列表中關(guān)閉已掛起的應(yīng)用不會產(chǎn)生崩潰日志记焊。 一旦應(yīng)用被掛起,它何時被終止都是合理的栓撞。所以不會產(chǎn)生崩潰日志遍膜。)

四碗硬、低內(nèi)存崩潰

低內(nèi)存崩潰日志與其他類型的崩潰日志很不一樣,它們不指向特定的文件和代碼行瓢颅。相反恩尾,它們畫出了閃退時設(shè)備上的內(nèi)存使用情況的圖表
頭部還是跟其他崩潰日志很像的: 提供了 Incident Identifier, CrashReporter Key, Hardware Model, OS Version等信息。

接下來部分是低內(nèi)存崩潰日志特有的:

  • Free pages 指可用內(nèi)存頁數(shù)挽懦。每頁大小約是4KB, 上面的日志中翰意,可用內(nèi)存約為3,872 KB (或者說 3.9 MB)。
  • Purgeable pages 是那部分可被清除或重用的內(nèi)存信柿。在上面的日志中冀偶,是0KB。
  • Largest process是閃退時使用大部分內(nèi)存的應(yīng)用名稱渔嚷,在上面的日志中进鸠,正是你的應(yīng)用!
  • Processes顯示了閃退時各進程列表,還包含內(nèi)存使用量形病。包含進程名 (第一列), 進程唯一標識符(第二名), 進程使用的內(nèi)存頁數(shù)(第三列)客年。最后一列是每個應(yīng)用的狀態(tài)。通常漠吻,發(fā)生閃退的應(yīng)用的狀態(tài)是 frontmost量瓜。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市途乃,隨后出現(xiàn)的幾起案子绍傲,更是在濱河造成了極大的恐慌,老刑警劉巖耍共,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唧取,死亡現(xiàn)場離奇詭異,居然都是意外死亡划提,警方通過查閱死者的電腦和手機枫弟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹏往,“玉大人淡诗,你說我怎么就攤上這事∫谅模” “怎么了韩容?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長唐瀑。 經(jīng)常有香客問我群凶,道長,這世上最難降的妖魔是什么哄辣? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任请梢,我火速辦了婚禮赠尾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毅弧。我一直安慰自己气嫁,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布够坐。 她就那樣靜靜地躺著寸宵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪元咙。 梳的紋絲不亂的頭發(fā)上梯影,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音庶香,去河邊找鬼甲棍。 笑死,一個胖子當著我的面吹牛脉课,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播财异,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼倘零,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了戳寸?” 一聲冷哼從身側(cè)響起呈驶,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疫鹊,沒想到半個月后袖瞻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡拆吆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年聋迎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枣耀。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡霉晕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捞奕,到底是詐尸還是另有隱情牺堰,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布颅围,位于F島的核電站伟葫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏院促。R本人自食惡果不足惜筏养,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一斧抱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撼玄,春花似錦夺姑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荔茬,卻和暖如春废膘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慕蔚。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工丐黄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孔飒。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓灌闺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坏瞄。 傳聞我的和親對象是個殘疾皇子桂对,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345