iOS錯誤堆棧查找崩潰原因的方法

作者:崔志偉
BugHD 是 FIR.im 為開發(fā)者提供的查找崩潰的工具,一些同學(xué)使用后,對于根據(jù)錯誤堆棧查找問題的方法還有一些疑問音同,現(xiàn)在我用一個FIR.imiOS客戶端在BugHD上搜集到的崩潰做例子欠动,帶大家了解一下BugHD:

liebiao.png
liebiao.png

我解讀一下這份崩潰日志:

進程信息

*** -[__NSArrayI objectAtIndex:]: index 20 beyond bounds [0 .. 0]是閃退進程的相關(guān)信息贸营。

  • 崩潰版本: BugHD 會記錄崩潰產(chǎn)生的具體的 version 和 build 號骇吭,需要了解更多關(guān)于版本號管理的同學(xué)橙弱,可以看一下淺談 iOS 版本號
  • 崩潰總數(shù): 記錄這個原因?qū)е碌谋罎⒖倲?shù)绵跷。
  • 發(fā)生設(shè)備: 記錄遇到這一問題的設(shè)備數(shù)量膘螟。

設(shè)備型號

shebei.png
shebei.png

標識設(shè)備類型成福。 如果很多崩潰日志都是來自相同的設(shè)備類型碾局,說明應(yīng)用只在某特定類型的設(shè)備上有問題。從上圖可以看出奴艾,發(fā)生崩潰的設(shè)備為 iPhone4S净当,iOS 操作系統(tǒng)為 7.1.2。

其他設(shè)備信息

qita.png
qita.png

錯誤堆棧

從錯誤堆棧中,你可以看到閃退發(fā)生時拋出的異常類型像啼,也可以看到異常編碼和拋出異常的線程俘闯。

<pre><code>
0 CoreFoundation 0x2d6eaf9b <redacted> + 154
1 libobjc.A.dylib 0x37f65ccf objc_exception_throw + 38
2 CoreFoundation 0x2d621a39 <redacted> + 176
<b>3 FIR 0x000f0e97 FIR + 69271</b>
4 UIKit 0x2ff0c4ab <redacted> + 518
5 UIKit 0x2ff0c269 <redacted> + 24
6 UIKit 0x3009836b <redacted> + 634
7 UIKit 0x2ffb5d63 <redacted> + 418
8 UIKit 0x2ffb5b6d <redacted> + 44
9 UIKit 0x2ffb5b05 <redacted> + 184
10 UIKit 0x2ff07d59 <redacted> + 380
11 QuartzCore 0x2fb8562b <redacted> + 142
12 QuartzCore 0x2fb80e3b <redacted> + 350
13 QuartzCore 0x2fb80ccd <redacted> + 16
14 QuartzCore 0x2fb806df <redacted> + 230
15 QuartzCore 0x2fb804ef <redacted> + 314
16 QuartzCore 0x2fb7a21d <redacted> + 56
17 CoreFoundation 0x2d6b6255 <redacted> + 20
18 CoreFoundation 0x2d6b3bf9 <redacted> + 284
19 CoreFoundation 0x2d6b3f3b <redacted> + 730
20 CoreFoundation 0x2d61eebf CFRunLoopRunSpecific + 522
21 CoreFoundation 0x2d61eca3 CFRunLoopRunInMode + 106
22 GraphicsServices 0x32578663 GSEventRunModal + 138
23 UIKit 0x2ff6b14d UIApplicationMain + 1136
24 FIR 0x000e9743 FIR + 38723
25 libdyld.dylib 0x38472ab7 <redacted> + 2
</code></pre>

以上的錯誤堆棧信息是閃退發(fā)生時所有活動幀清,它包含閃退發(fā)生時調(diào)用函數(shù)的清單忽冻。我們收集到的信息有三種情況:

  1. 已標記錯誤位置的:
3   FIR        0x000000010bfddd8c -[FIRViewController viewDidLoad] + 8588
  1. 未標記錯誤位置真朗,有基地址的情況:
3   FIR           0x000e3e92 0xd3000 + 69266

這條調(diào)用棧包括下面四部分:

  • 模塊號: 這里是3
  • 二進制庫名: 這里是 FIR.im
  • 調(diào)用方法的地址: 這里是 0x000e3e92
  • 第四部分分為兩列,基地址和偏移地址僧诚。此處基地址為 0xd3000遮婶,偏移地址為 69266。

使用下面的命令符號化:

atos -arch armv7 -o FIR -l 0xd3000 0x000e3e92

結(jié)果:

-[FIRViewController viewDidLoad] (FIRViewController.m:156)

可以看到崩潰的類為 FIRViewController湖笨,函數(shù)為 viewDidLoad旗扑,文件名是 FIRViewController.m,行數(shù)是 156 行慈省。

  1. 未標記錯誤位置臀防,無基地址的情況:
3   FIR            0x000f0e97 FIR + 69271

基地址的計算方法:

-load address = 0x000f0e97 - 69271 =0xe0000

使用下面的命令符號化:

atos -arch armv7 -o FIR -l 0xe0000 0x000f0e97

結(jié)果:

-[FIRViewController viewDidLoad] (FIRViewController.m:156)

可以看到崩潰的類為FIRViewController,函數(shù)為viewDidLoad边败,文件名是FIRViewController.m袱衷,行數(shù)是156行。

這里我們簡單我們看一下 atos 用法:

atos -o dysm文件路徑 -l  模塊load地址 -arch cpu 指令集種類 調(diào)用方法的地址
  1. dysm 文件路徑:可以在 Xcode Organizer 的 Archives 標簽欄下找到所有已歸檔的應(yīng)用文件放闺。它保存了編譯過程的詳細信息祟昭,其中包括符號信息。
  2. 模塊 load 地址:模塊加載的基地址怖侦,可以在日志的動態(tài)庫信息中找到對應(yīng)模塊的基地址篡悟。這里為 0xd3000
  3. cpu 指令集種類:可以為 armv6 armv7 armv7s arm64。具體用哪個匾寝,可以參考對應(yīng)模塊的動態(tài)庫信息中確定搬葬。

詳情 http://blog.fir.im/2014/ios_crash/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市艳悔,隨后出現(xiàn)的幾起案子急凰,更是在濱河造成了極大的恐慌,老刑警劉巖猜年,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抡锈,死亡現(xiàn)場離奇詭異,居然都是意外死亡乔外,警方通過查閱死者的電腦和手機床三,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杨幼,“玉大人撇簿,你說我怎么就攤上這事聂渊。” “怎么了四瘫?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵汉嗽,是天一觀的道長。 經(jīng)常有香客問我找蜜,道長饼暑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任洗做,我火速辦了婚禮撵孤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竭望。我一直安慰自己邪码,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布咬清。 她就那樣靜靜地躺著闭专,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旧烧。 梳的紋絲不亂的頭發(fā)上影钉,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音掘剪,去河邊找鬼平委。 笑死,一個胖子當著我的面吹牛夺谁,可吹牛的內(nèi)容都是我干的廉赔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼匾鸥,長吁一口氣:“原來是場噩夢啊……” “哼蜡塌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勿负,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤馏艾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奴愉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琅摩,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年锭硼,在試婚紗的時候發(fā)現(xiàn)自己被綠了房资。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡账忘,死狀恐怖志膀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鳖擒,我是刑警寧澤溉浙,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蒋荚,受9級特大地震影響戳稽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜期升,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一惊奇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧播赁,春花似錦颂郎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坎背,卻和暖如春替劈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背得滤。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工陨献, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懂更。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓眨业,卻偏偏與公主長得像,于是被迫代替她去往敵國和親沮协。 傳聞我的和親對象是個殘疾皇子坛猪,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

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

  • 轉(zhuǎn)自http://www.raywenderlich.com/zh-hans/30818/ios應(yīng)用崩潰日志揭秘 ...
    RunSnails閱讀 4,434評論 2 22
  • 當你寫一個應(yīng)用程序,你將不可避免地犯錯誤皂股。 更糟糕的是墅茉,您的應(yīng)用程序設(shè)計中會時不時地出現(xiàn)錯誤。 Xcode 的調(diào)試...
    titvax閱讀 684評論 0 0
  • 前言 iOS分析定位崩潰問題有很多種方式呜呐,但是發(fā)布到AppStore的應(yīng)用如果崩潰了就斤,我們該怎么辦呢?通常我們都會...
    xh_0129閱讀 396評論 2 2
  • crash捕獲介紹 如果對crash捕獲不太了解蘑辑,可以先參考這篇文章,本文進行Mach異常+Unix信號方式捕獲c...
    xiaoyi6409閱讀 9,970評論 14 14
  • 演出陣容:鄭嘉穎洋魂、謝天華绷旗、呂良偉喜鼓、譚耀文、黎耀祥衔肢、鄭丹瑞庄岖、閻奕格、胡琳 “金鱗豈是池中物角骤,一遇風云便化龍” 一句預(yù)...
    孤鹿Grouplus閱讀 576評論 0 0