iOS crash debug

1、crash文件的獲取

設(shè)備與電腦上的iTunes Store同步后,會(huì)將崩潰日志保存在電腦上。根據(jù)電腦操作系統(tǒng)的不同侨赡,崩潰日志將保存在以下位置:
Mac OS X:~/Library/Logs/CrashReporter/MobileDevice/
Windows XP: C:Documents and Settings<USERNAME>Application DataApple ComputerLogsCrashReporterMobileDevice<DEVICE_NAME>
Windows Vista or 7: C:Users<USERNAME>AppDataRoamingApple ComputerLogsCrashReporterMobileDevice<DEVICE_NAME>
當(dāng)用戶抱怨閃退時(shí),你可以要求他讓設(shè)備與iTunes同步粱侣,并根據(jù)操作系統(tǒng)的不同羊壹,到上述位置把崩潰日志下載下來(lái),然后通過電子郵件發(fā)送給你齐婴。

2油猫、crash文件的符號(hào)化

將十六進(jìn)制地址轉(zhuǎn)化成方法名稱和行數(shù)的過程稱之為Symbolication(符號(hào)化)。
(1) 利用Xcode的Devices and Simulators
只要把.crash文件拉到Xcode的device log里面尔店,然后幾秒鐘后就會(huì)符號(hào)化眨攘。但是這里有個(gè)前提主慰,就是這個(gè)發(fā)生crash的版本包必須是你自己的Xcode里面Archive出來(lái)的(這個(gè)是蘋果自帶的方法嚣州,會(huì)自動(dòng)檢測(cè)是否含有匹配的.dSYM文件和應(yīng)用二進(jìn)制文件)。

那如果要是在新電腦上也想符號(hào)化怎么辦共螺?只有相匹配的.dSYM文件和應(yīng)用二進(jìn)制文件就可以符號(hào)化该肴。必需完全匹配才行。否則藐不,日志將無(wú)法被完全符號(hào)化匀哄。應(yīng)用的二進(jìn)制文件就是打的包得.ipa后綴改成.zip秦效,然后解壓后里面有個(gè).app文件就是應(yīng)用的二進(jìn)制文件。將.dSYM文件與.app文件 和.crash文件放一個(gè)目錄下涎嚼,然后再用deviceLog方法就可以符號(hào)化了阱州。

(2) 利用Symbolicatecrash命令行工具
如果想查看.crash文件的廬山真面目,需要找出在上傳應(yīng)用時(shí)所發(fā)送的.app和.dSYM文件法梯,切記每次發(fā)送新版本都要保留這兩個(gè)文件苔货,不然沒有辦法解析Crash Log的×⒀疲可以先把這兩個(gè)文件拷貝到桌面的某一個(gè)文件夾中夜惭,然后把.crash的文件也拷貝的同一個(gè)文件夾下。

這一解析過程需要使用Symbolicatecrash來(lái)完成铛绰,首先要找到Symbolicatecrash文件诈茧,xcode5.0在 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/ Symbolicatecrash文件獨(dú)立于Xcode,可以拷到剛才放crash log的文件夾中使用捂掰,在開始解析之前需要先進(jìn)行一些校驗(yàn):

  1. 查看xx.app文件的uuid的方法,在命令行中輸入:
    dwarfdump --uuid xxx.app/xxx (xxx工程名)

  2. 查看xx.app.dSYM文件的uuid的方法敢会,在命令行輸入:
    dwarfdump --uuid xxx.app.dSYM (xxx工程名)

3.查看.crash的uuid,位于crash日志中的Binary Images:中的第一行尘颓。如:armv7s <13760bde0d073f1eb4d596c3df753f4b>
只有三者的uuid相同才能解析.crash文件走触,然后在命令行輸入:
./symbolicatecrash xxx.crash xxx.app.dSYM > test.log
這樣可以將.crash日志轉(zhuǎn)換成test.log,test.log即可讀的函數(shù)文件疤苹。輸入上述命令可能會(huì)出現(xiàn)Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 53.這個(gè)錯(cuò)誤互广。如果出現(xiàn)上述錯(cuò)誤,輸入命令:export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer卧土,然后繼續(xù)執(zhí)行./symbolicatecrash xxx.crash xxx.app.dSYM > test.log可以成功

3惫皱、crash log分析

Incident Identifier:當(dāng)前crash的 id,可以區(qū)分不同的crash事件
CrashReporter Key: 當(dāng)前設(shè)備的id尤莺,可以判斷crash在某一設(shè)備上出現(xiàn)的頻率
Hardware Model: 設(shè)備型號(hào)
Process: 當(dāng)前應(yīng)用的名稱旅敷,后面中括號(hào)中為當(dāng)前的應(yīng)用在系統(tǒng)中的進(jìn)程id
Path: 當(dāng)前應(yīng)用在設(shè)備中的路徑
Identifier:
bundle idVersion: 應(yīng)用版本號(hào)
Code Type: (還不清楚)
Date/Time: crash事件 時(shí)間
OS Version: 當(dāng)前系統(tǒng)版本
Exception Type: 異常類型
Exception Codes: 異常出錯(cuò)的代碼
Triggered by Thread: 在某一個(gè)線程出了問題導(dǎo)致crash,Thread 0 為主線程颤霎、其它的都為子線程
Last Exception Backtrace: 最后異诚彼回溯,一般根據(jù)這個(gè)代碼就能找到crash的具體問題

(1) Crash Log分類

如果所有的CrashLog已經(jīng)被采集下來(lái)了友酱,為了避免重復(fù)解決相同的bug晴音,這個(gè)時(shí)候就需要所有的CrashLog分類,通過上面已有的信息缔杉,就可以對(duì)CrashLog做如下的分類控制:

  1. 通過設(shè)備id查找當(dāng)前設(shè)備上出現(xiàn)的crash(通過CrashReporter Key)锤躁;
  2. 查找所有在iphone5上出現(xiàn)的crash(通過Hardware Model);
  3. 查找所有在ios7.1上出現(xiàn)的crash(通過OS Version)或详;
  4. 查找所有在應(yīng)用1.0版本上出現(xiàn)的crash(通過 Version)系羞;
  5. 查看在某一個(gè)時(shí)間段內(nèi)出現(xiàn)的crash(通過 Date/Time)郭计;
  6. 查找所有因?yàn)閮?nèi)存問題出現(xiàn)的crash (通過 Exception Type);
  7. 查找在主線程出現(xiàn)crash的問題(Triggered by Thread == 0);
  8. 對(duì)上述條件的組合查詢椒振;
(2) Exception Type

1)EXC_BAD_ACCESS
此類型的Excpetion是我們最長(zhǎng)碰到的Crash昭伸,通常用于訪問了不改訪問的內(nèi)存導(dǎo)致。一般EXC_BAD_ACCESS后面的"()"還會(huì)帶有補(bǔ)充信息澎迎。
SIGSEGV: 通常由于重復(fù)釋放對(duì)象導(dǎo)致勋乾,這種類型在切換了ARC以后應(yīng)該已經(jīng)很少見到了。
SIGABRT: 收到Abort信號(hào)退出嗡善,通常Foundation庫(kù)中的容器為了保護(hù)狀態(tài)正常會(huì)做一些檢測(cè)辑莫,例如插入nil到數(shù)組中等會(huì)遇到此類錯(cuò)誤。
SEGV:(Segmentation Violation)罩引,代表無(wú)效內(nèi)存地址各吨,比如空指針,未初始化指針袁铐,棧溢出等揭蜒;
SIGBUS:總線錯(cuò)誤,與 SIGSEGV 不同的是剔桨,SIGSEGV 訪問的是無(wú)效地址屉更,而 SIGBUS 訪問的是有效地址,但總線訪問異常(如地址對(duì)齊問題)
SIGILL:嘗試執(zhí)行非法的指令洒缀,可能不被識(shí)別或者沒有權(quán)限
2)EXC_BAD_INSTRUCTION
此類異常通常由于線程執(zhí)行非法指令導(dǎo)致
3)EXC_ARITHMETIC
除零錯(cuò)誤會(huì)拋出此類異常

(3) Exception Code

0xbaaaaaad錯(cuò)誤碼:用戶按住Home鍵和音量鍵瑰谜,獲取當(dāng)前內(nèi)存狀態(tài),不代表崩潰树绩。
0xbad22222錯(cuò)誤碼:當(dāng)VOIP程序在后臺(tái)太過頻繁的激活時(shí)被iOS干掉萨脑。
0x8badf00d錯(cuò)誤碼:程序啟動(dòng)或者恢復(fù)時(shí)間過長(zhǎng)被watch dog終止,意為“ate bad food”饺饭。
0xc00010ff錯(cuò)誤碼:程序執(zhí)行大量耗費(fèi)CPU和GPU的運(yùn)算渤早,導(dǎo)致設(shè)備過熱,觸發(fā)系統(tǒng)過熱保護(hù)被系統(tǒng)終止瘫俊,意為“cool off”鹊杖。
0xdead10cc錯(cuò)誤碼:因?yàn)樵诤笈_(tái)時(shí)仍然占據(jù)系統(tǒng)資源(比如通訊錄)被干掉,意為“dead lock”扛芽。
0xdeadfa11錯(cuò)誤碼:用戶強(qiáng)制退出骂蓖,意為“dead fall”。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胸哥,一起剝皮案震驚了整個(gè)濱河市涯竟,隨后出現(xiàn)的幾起案子赡鲜,更是在濱河造成了極大的恐慌空厌,老刑警劉巖庐船,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嘲更,居然都是意外死亡筐钟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門赋朦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)篓冲,“玉大人,你說(shuō)我怎么就攤上這事宠哄∫冀” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵毛嫉,是天一觀的道長(zhǎng)诽俯。 經(jīng)常有香客問我,道長(zhǎng)承粤,這世上最難降的妖魔是什么暴区? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辛臊,結(jié)果婚禮上仙粱,老公的妹妹穿的比我還像新娘。我一直安慰自己彻舰,他們只是感情好伐割,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刃唤,像睡著了一般口猜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上透揣,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天济炎,我揣著相機(jī)與錄音,去河邊找鬼辐真。 笑死须尚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侍咱。 我是一名探鬼主播耐床,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼楔脯!你這毒婦竟也來(lái)了撩轰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堪嫂,沒想到半個(gè)月后偎箫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皆串,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年淹办,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恶复。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怜森,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谤牡,到底是詐尸還是另有隱情副硅,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布翅萤,位于F島的核電站想许,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏断序。R本人自食惡果不足惜流纹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望违诗。 院中可真熱鬧漱凝,春花似錦、人聲如沸诸迟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阵苇。三九已至壁公,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绅项,已是汗流浹背紊册。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留快耿,地道東北人囊陡。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像掀亥,于是被迫代替她去往敵國(guó)和親撞反。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • 本文就捕獲iOS Crash搪花、Crash日志組成遏片、Crash日志符號(hào)化嘹害、異常信息解讀、常見的Crash五部分介紹吮便。...
    xukuangbo_閱讀 1,581評(píng)論 0 0
  • iOS開發(fā)中笔呀,經(jīng)常遇到App在開發(fā)及測(cè)試時(shí)不會(huì)有問題,但是裝在別人的設(shè)備中會(huì)出現(xiàn)各種不定時(shí)的莫名的 crash线衫,因...
    咖咖嘻閱讀 6,154評(píng)論 3 21
  • 7月18日惨驶,朋友圈迅速被張作霖中華民國(guó)十六年伍拾圓龍鳳金幣908.5萬(wàn)元的天價(jià)刷屏了白热。話說(shuō)這一枚金幣以黃金胚餅打制...
    天衣居士001閱讀 261評(píng)論 0 0
  • 人可以為了一點(diǎn)點(diǎn)的利益就出爾反爾的,想走了粗卜。不管是什么好混還是什么屋确? ...
    靜靜的等待著閱讀 276評(píng)論 0 0