iOS App崩潰日誌分析

APP新版本上線之前,一般都會經過測試團隊的反覆測試,確認無bug後纔會發佈。發佈那刻作爲開發人員的你,估計欣喜若狂吧,自豪吧!!。發佈後線上運行好長一段時間,均安然無恙,可突然有一天你們家CEO說,自家APP崩了,出現閃退了。那一刻在CEO面前感覺弱爆了的感覺有木有啊?着急了吧,抓狂了吧,F**K it, 怎麼解決呢?君不必太過憂傷,且聽我給你細說。

獲取iOS APP崩潰日誌

你造嗎,iOS系統會生成各APP閃退的崩潰日誌?“哦,在哪裏?長什麼樣?”要過去iOS系統生成的Crash日誌,請將發生崩潰異常的Apple設備連接到你的Mac電腦,打開Xcode->Window->Devices菜單,出現如下界面: 

點擊View Device Logs按鈕可以查看接入手機中所有的Crash日誌,選擇相應APP的某條Crash日誌點擊右鍵導出該日誌並命名爲myCrash.crash:

查找該日誌對應的dSYM文件和APP包

剛纔導出的日誌有如天書般讓人云裏霧裏,要想將其翻譯成易懂的文字,我們需要兩個文件的幫助,該日誌對應的dSYM文件和該App ipa文件,根據導出日誌裏的App 版本號可以從你的XcodeArchive記錄裏可以找到當時發佈該版本的xcarchive文件: 


選擇相應的xcarchive文件,右鍵在Finder中顯示,接着右鍵顯示包內容: 
 
將該dSYM拷貝到myCrash.crash同目錄下;同理將該Products下的XXX.app拷貝到myCrash.crash同目錄下: 
 
文件彙總如下圖:

將Crash日誌Symbolicate

1)確定三個文件的UUID一致 
使用dwarfdump命令可以查看XXX.app以及dSYM文件的UUID:

crash Johnkui$ dwarfdump --uuid XXX.app/XXX 
UUID: 9E4C94C4-DBA8-3E13-AE4D-75654E1FEC18 (armv7) XXX.app/XXX
UUID: 956EA55D-0CF2-335D-8DAC-7537216DDD78 (arm64) XXX.app/XXX
crash Johnkui$ dwarfdump --uuid XXX.app.dSYM/
UUID: 9E4C94C4-DBA8-3E13-AE4D-75654E1FEC18 (armv7) XXX.app.dSYM/Contents/Resources/DWARF/XXX
UUID: 956EA55D-0CF2-335D-8DAC-7537216DDD78 (arm64) XXX.app.dSYM/Contents/Resources/DWARF/XXX
1
2
3
4
5
6
崩潰日誌myCrash.crash的UUID可以在日誌文件裏的Binary Images:中第一行尖括號內, 
arm64 <956ea55d0cf2335d8dac7537216ddd78>,和上面兩個文件的UUID匹配,因此三者UUID一致。

2)使用symbolicatecrash工具 
Xcode有自帶的symbolicatecrash工具,可以通過dSYM文件將crash文件中的16進制地址轉換成可讀的函數地址,在Xcode中,搜索該工具的位置,不同版本的Xcode該工具的位置不太一樣:

crash Johnkui$  find /Applications/Xcode.app/ -name symbolicatecrash
1
Xcode 8位於:

/Applications/Xcode.app//Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
1
將該工具拷貝到/urs/bin/目錄下,但是Mac OS 11後系統關閉了root權限,可以通過重新啓動Mac,同事按住Command+R,然後打開Terminal, 輸入csrutil disable開啓root權限,然後重啓設置DEVELOPER_DIR系統變量:

crash Johnkui$ cd ~/
~ Johnkui$ vi .bash_profile
輸入:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
保存後:
~ Johnkui$ source .bash_profile 
...
crash Johnkui$ symbolicatecrash XXX.crash XXX.app.dSYM>XXX.txt
1
2
3
4
5
6
7
8
最後打開該XXX.txt文件,即可查看bug出現在哪行代碼了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章