iOS從crash信息中查找崩潰原因
原文 http://www.ianisme.com/ios/1805.html
之前使用推ter公司的崩潰搜集工具 crashlytics ,它可以準確定位APP崩潰的具體原因到代碼的某一行。這個工具也被很多的大公司采用。但是因為是推ter公司的,你們懂得(貌似DNS經常被污染),經常會漏掉很多崩潰信息。對我們的開發非常不利。前幾天發現了一款國內 FIR.im公司的產品 bughd ,因為服務器在國內,crash的反饋速度應該很快,于是我就簡單的測試了一下,非常不錯。美中不足的是,因為沒有上傳程序的dSYM文件,所有bughd不能準確定位到崩潰的具體位置。雖然FIR給出了教程( iOS錯誤堆棧查找崩潰原因的方法 ),但是可能不是非常淺顯易懂,因此我要來個詳細的擴展教學!一步步來!
1.制作崩潰代碼以及添加bughd SDK
這里我為了測試,寫了一個簡單的數組越界,如圖所示:
下載bughd SDK,將下載包中的FIR.framework 文件夾拖到Xcode項目中。在應用的設置中, Build Phases -> Link Binary With Libraries里添加SystemConfiguration.framework在 AppDelegate.m 中:
Objective-C
#import //導入頭文件
然后在application:didFinishLaunchingWithOptions:方法中加入一行:
Objective-C
[FIR handleCrashWithKey:@"YOUR_GENERAL_KEY"];
這里的 YOUR_GENERAL_KEY 是建立每個項目時將自動生成項目對應的General Key。
2.打包程序,并安裝到手機上
菜單欄->product->Archive。
如圖,在這一步的時候,show in Finder把剛剛生成的最新的xcarchive文件保存一份。
然后打包成功,安裝到手機上去(如果是發布,就上傳到AppStore上去)
3.查看崩潰信息,并查找原因
當有用戶使用此APP崩潰的時候會在bughd后臺收到崩潰信息。如圖所示:
看這個頭都大了吧,下面我教大家解碼!
把剛才保存的xcarchive文件打開,顯示包內容,將里面的“Products->Applications->文件”和”dSYMs->文件“保存到一個新的文件夾中,這里我的文件夾是CrashReport。
我們來看崩潰信息,具體應該看哪條信息,fir給出了教程已經很清楚了。我們就要序號為3的這種“未標記錯誤位置,無基地址的情況”
將0x000fdf7f轉換為10進制是1040255
1040255-20351 = 1019904
再轉為16進制為 0xf9000,這個就是基地址了。
我們打開終端,進入CrashReport文件夾,輸入如下命令就可以得到崩潰信息
Objective-C
atos -arch armv7 -o mengmengdai.app/mengmengdai -l 0xf9000 0x000fdf7f
如圖所示:
為了證實準確性,我使用了推ter的crashlytics工具進行了一次崩潰搜集:
注意看序號3,和我們分析出來的崩潰信息一模一樣,在這個地方數組越界了!
注意事項:不要兩個崩潰搜集同時使用,不然只有一個生效的!
總結:以上是為初學者準備的詳細教程,如果有什么不明白,可以再查看FIR.im官方的教程進行進一步理解。