做者:崔志偉
BugHD 是 FIR.im 爲開發者提供的查找崩潰的工具,一些同窗使用後,對於根據錯誤堆棧查找問題的方法還有一些疑問,如今我用一個FIR.imiOS客戶端在BugHD上搜集到的崩潰作例子,帶你們瞭解一下BugHD:ios
我解讀一下這份崩潰日誌:web
*** -[__NSArrayI objectAtIndex:]: index 20 beyond bounds [0 .. 0]
是閃退進程的相關信息。函數
標識設備類型。 若是不少崩潰日誌都是來自相同的設備類型,說明應用只在某特定類型的設備上有問題。從上圖能夠看出,發生崩潰的設備爲 iPhone4S,iOS 操做系統爲 7.1.2。工具
從錯誤堆棧中,你能夠看到閃退發生時拋出的異常類型,也能夠看到異常編碼和拋出異常的線程。oop
0 CoreFoundation 0x2d6eaf9b + 154 1 libobjc.A.dylib 0x37f65ccf objc_exception_throw + 38 2 CoreFoundation 0x2d621a39 + 176 3 FIR 0x000f0e97 FIR + 69271 4 UIKit 0x2ff0c4ab + 518 5 UIKit 0x2ff0c269 + 24 6 UIKit 0x3009836b + 634 7 UIKit 0x2ffb5d63 + 418 8 UIKit 0x2ffb5b6d + 44 9 UIKit 0x2ffb5b05 + 184 10 UIKit 0x2ff07d59 + 380 11 QuartzCore 0x2fb8562b + 142 12 QuartzCore 0x2fb80e3b + 350 13 QuartzCore 0x2fb80ccd + 16 14 QuartzCore 0x2fb806df + 230 15 QuartzCore 0x2fb804ef + 314 16 QuartzCore 0x2fb7a21d + 56 17 CoreFoundation 0x2d6b6255 + 20 18 CoreFoundation 0x2d6b3bf9 + 284 19 CoreFoundation 0x2d6b3f3b + 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 + 2
以上的錯誤堆棧信息是閃退發生時全部活動幀清,它包含閃退發生時調用函數的清單。咱們收集到的信息有三種狀況:ui
已標記錯誤位置的:編碼
3 FIR 0x000000010bfddd8c -[FIRViewController viewDidLoad] + 8588
未標記錯誤位置,有基地址的狀況:spa
3 FIR 0x000e3e92 0xd3000 + 69266
這條調用棧包括下面四部分:操作系統
使用下面的命令符號化:線程
atos -arch armv7 -o FIR -l 0xd3000 0x000e3e92
結果:
-[FIRViewController viewDidLoad] (FIRViewController.m:156)
能夠看到崩潰的類爲 FIRViewController,函數爲 viewDidLoad,文件名是 FIRViewController.m,行數是 156 行。
未標記錯誤位置,無基地址的狀況:
3 FIR 0x000f0e97 FIR + 69271
基地址的計算方法:
-load address = 0x000f0e97 - 69271 =0xe0000
使用下面的命令符號化:
atos -arch armv7 -o FIR -l 0xe0000 0x000f0e97
結果:
-[FIRViewController viewDidLoad] (FIRViewController.m:156)
能夠看到崩潰的類爲FIRViewController
,函數爲viewDidLoad
,文件名是FIRViewController.m
,行數是156行。
這裏咱們簡單咱們看一下 atos 用法:
atos -o dysm文件路徑 -l 模塊load地址 -arch cpu 指令集種類 調用方法的地址