iOS crash日志分析

iOS程序崩潰定位,一般會出現在3種地方。

1,我們正在編寫程序的時候,運行崩潰。

2,測試階段,測試出現的崩潰閃退。

3,項目上線后用戶出現的崩潰閃退。

我們該如何定位到這些崩潰的位置呢?下面從這3個地方可以來定位到我們代碼中的位置,精準到是哪些代碼出現了問題。

第一種情況,在我們正在codeing的時候,這也是最簡單的,最容易找出問題的時候。


打上全局斷點,手機連著電腦在運行時,如果出現崩潰就會直接定位到崩潰的地方。


第二種情況,在測試階段出現的崩潰問題。這個時候我們就需要測試提供給我們手機崩潰后的ips或者crash文件(ips文件可以直接修改成crash文件,直接改后綴名就可以了),這里說下如何拿到crash文件,

把運行崩潰了的手機連上Xcode->Window->Devices

選中手機和view device Logs

找到應用程序的creash文件,把右邊的copy下來,再在桌面建個.crash文件,把里面的內容copy進去就OK了

使用命令行工具symbolicatecrash

通過symbolicatecrash來手動符號化crash log。

打開終端輸入以下命令:

find /Applications/Xcode.app -name symbolicatecrash -type f

你會找到:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/./symbolicatecrash

當找到symbolicatecrash后,我們在桌面上建個文件夾把(我建的文件夾就叫crash),然后把symbolicatecrash copy到這個文件夾中去,把我們之前的.crash文件也copy進去。

然后把測試用的安裝包(.ipa文件打開)->顯示包內容,可以看到一個payload的文件夾,把里面的這件也copy 到我們之前的新建的文件夾中去。



最后我們再找到這個安裝包的dyms文件

xcode -> window ->organizer

找到我們之前打包的,顯示包內容


把這個dsym 文件也放到我們之前建的文件夾里面去

現在這個文件夾中總共有了4個文件


1.打開終端用命令切換到桌面剛建的文件夾目錄下:

2.執行命令

./symbolicatecrash /Users/你的電腦名/Desktop/crash(剛剛新建的文件夾,里面存放了4個文件的)/PM_GTS2.crash (文件夾中的.crash)/Users/你的電腦名/Desktop/crash/PM_GTS2.app.dSYM(文件夾中的.dSYM文件) > XXX.crash(最終生成的.crash,名字自己取)

這時候終端有可能會出現:Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 60.

3.輸入命令:export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"

4.再執行./symbolicatecrash /Users/你的電腦名/Desktop/crash(剛剛新建的文件夾,里面存放了4個文件的)/PM_GTS2.crash (文件夾中的.crash)/Users/你的電腦名/Desktop/crash/PM_GTS2.app.dSYM(文件夾中的.dSYM文件) > XXX.crash(最終生成的.crash,名字自己取)

最后生成的XXX.crash文件就可以看到崩在哪里了,哪個方法,多少行都可以知道



第三種情況,項目上線后參考 http://www.lxweimin.com/p/70ed36cf8a98

在Xcode中查看具體崩潰信息

在xcode中菜單的window下選擇organizer,在打開的窗口中選擇Crashes,這樣Xcode會開始下載相關的崩潰信息到本地中(網絡環境不好時可能要等待一些時間)。

organizer窗口

可以在左側選擇你要查看崩潰信息的發布版本

在崩潰信息這一欄蘋果會按照崩潰數量排序,將崩潰數量最多的排在最前。右側的詳細信息會顯示是崩潰時的調用堆棧,可以看到是哪行代碼導致的崩潰。

選中要解決的崩潰后,可以在窗口右側選擇open in project。

神奇的事情發生了!!!在打開的項目中,會直接定位到崩潰的那行代碼。這大大提高了調試的效率!我已經的迫不及待要和開發安卓的同事分享這份喜悅了。

注意!注意!

因為之前的項目發布時沒有用xcode7打包,所以猜測符號表可能沒有上傳到蘋果服務器,所以以前的項目可能不能直接顯示是哪行代碼,而是顯示調用時出錯的內存地址。不過下個版本你用xcode發布后就可以正常看到啦。

在解決完這個crash后可以標記為已經解決。有兩個地方可以標記。

第三種情況參考 http://www.lxweimin.com/p/70ed36cf8a98

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容