1.前言
想來每個iOS攻城獅,都免不了要接觸.crash文件
那么什么是.crash文件?
iOS app的所有崩潰記錄都會記錄在設備上,所以對於和我一樣沒有集成讓用戶發送崩潰報告功能的iOS開發者來說,要獲得crash文件就必須先連上崩潰過的機器,然后從崩潰過的機器上導出.crash文件
2.如何解析.crash文件
我們先看一眼導出來的.crash文件,重點看下崩潰部分的記錄
如下圖

顯然從這圖里,我們沒法定位出具體的錯誤,和崩潰的具體行數。
我們得到是個二進制的報告,這時候我們需要對它進行反編譯。
對.crash文件進行反編譯我們需要用到三個文件,缺一不可
2.1.找到發布app時的.ipa文件(就是你打包app上傳到商店里的那個文件)
2.2.找到Archive時生成的.dSYM文件

Show in Finder后對文件夾中的這個.xcarchive文件右鍵,顯示包內容,就可以看到一個名為dSYMs的文件夾,把里面的.dSYM文件拷出來
2.3.將.ipa、.crash、.dSYMs 文件放在同一個文件夾(例如:創建一個bugcrash文件夾)
2.4.打開你的xcode,然后打開你發布時的代碼(記住必須保證是你發布時的代碼,如果不是的話,可能會出現指向的崩潰行數有誤,或者無法解析出來的問題)
3.利用xcode自帶re-symbolicate解析崩潰報告

點擊Devices進去

然后點擊View Device Logs 進去


現在打開
bugcrash文件夾,然后把.crash文件拖入右框中然后選中右鍵re-symbolicate log
進行解析
大約1-10秒中之后,我們就能發現之前的二進制數變成了我們想要看到的具體行數和具體的.crash原因.

4.如果xocde自帶的Re-symbolicate仍無法解析,那么我們需要利用symbolicatecrash借助命令行手動解析
symbolicatecrash是一個隱藏工具,它在我的Mac中的具體路徑如下(Xcode6.1.app請換成你的Xcode名稱)
/Applications/Xcode6.1.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
把這個路徑拷貝一下,然后粘到Finder的“前往文件夾”下,前往,就可以看到symbolicatecrash工具了,現在把它也拷到桌面的crash文件夾里。至此,crash文件夾里現在有4個文件了,分別是.app, .crash, .dSYM, symbolicatecrash。接下來就是用終端敲命令,生成更易分析的crash。
./symbolicatecrash /Users/xxxx/Desktop/bugcrash/InOrder.crash /Users/xxxx/Desktop/bugcrash/InOrder.app.dSYM > Control_symbol.crash
上述命令中,"xxxx"和"InOrder"請自行替換成對應的名稱。運行,這時候終端可能會報錯Error: "DEVELOPER_DIR" is not defined at /usr/local/bin/symbolicatecrash line 53. 這時候在終端中再輸入如下(Xcode6.1.app依然是要替換成實際名稱)
然后再跑一下剛剛的那個命令,這時候看一下桌面的crash文件夾下就會多出一個名為“Control_symbol.crash”的文件,我們打開看一下。和剛剛一樣。

如果還有什么不明白歡迎在下面留言,有時間的我回一一回復,謝謝大家。