iOS對于已經上線的應用,或者是release環境包導致的crash,這種問題怎么辦?用symbolicatecrash工具來分析找crash.
dSYM 符號集
1.進行崩潰分析,首先要弄懂一個概念,就是符號集。
2.符號集是我們對ipa文件進行打包之后,和.app文件同級的后綴名為.dSYM的文件,這個文件必須使用Xcode進行打包才有。
3.每一個.dSYM文件都有一個UUID,和.app文件中的UUID對應,代表著是一個應用。而.dSYM文件中每一條崩潰信息也有一個單獨的UUID,用來和程序的UUID進行校對。
4.我們如果不使用.dSYM文件獲取到的崩潰信息都是不準確的。
5.符號集中存儲著文件名、方法名、行號的信息,是和可執行文件的16進制函數地址對應的,通過分析崩潰的.Crash文件可以準確知道具體的崩潰信息。
當程序崩潰的時候,我們可以獲得到崩潰的錯誤堆棧,但是這個錯誤堆棧都是0x開頭的16進制地址,需要我們使用Xcode自帶的symbolicatecrash工具來將.Crash和.dSYM文件進行符號化,就可以得到詳細崩潰的信息。
一、準備文件
想用這個工具找crash就要準備3個文件
xxx.crash
xxx.app.dSYM
xxx.app(或者沒有app后綴只有項目名)
1.桌面建立新文件夾,取名“crashTest”
2.導出xxx.crash文件
xxx.crash:手機設備上的崩潰日志
導出方法:xcode(9.2版本)鏈接手機-> window -> Devices simulators -> view Devices Logs -> 右鍵導出xxx.crash文件放入桌面“crashTest”文件夾
3.找到對應的app與xxx.app.dSYM文件
-
xcode鏈接設備 -> Pruduct -> Archive (等待完成) 生成了下圖文件Archive.png
右鍵 show in finder - > 顯示包內容 - > dSYMs - > xxxx.app.dSYM
找到xxxx.app.dSYM文件 放到桌面“crashTest”文件夾-
還是在這個文件里 - > Products - > Applications - > app 找到對應app放文件夾里 如下圖find.png
到現在你的“crashTest”文件夾已經有這三個文件了ready.png
二、分析crash
- 找到symbolicatecrash
終端輸入: find /Applications/Xcode.app -name symbolicatecrash -type f
得到symbolicatecrash的路徑
find.png
- 用命令將symbolicatecrash拷貝到桌面的crashTest文件夾里面,與.app和.app.dSYM放一起(手動找到symbolicatecrash,拷貝出來也行)
終端輸入:cp + 剛剛得到的symbolicatecrash路徑 + 桌面上“crashTest”文件夾的路徑 如下圖copy.png
這時候 桌面的文件夾總共有4個文件add sym.png
3.執行symbolicatecrash
1 終端cd到你的“crashTest”文件目錄下
2 執行 : ./symbolicatecrash + 你目錄下的.crash路徑 + 目錄下app.dSYM文件路徑 > 你要生成的文件名.crash
比如我的:wangxiaokangdeiMac:crashTest wangxiaokang$ ./symbolicatecrash /Users/wangxiaokang/Desktop/crashTest/DTServiceHub\ \ 2018-3-8\ 上午9-06.crash /Users/wangxiaokang/Desktop/crashTest/schoolmasterSide.app.dSYM > test.crash
執行完你桌面的“crashTest”文件就多多出來一個“test.crash”文件,這個里面就顯示崩潰信息
- 如果出現了
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
那么設置下
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
再執行生成.crash文件就可以了
如果你解析出來的.crash文件和你剛剛手機里導出來的.crash 里面的內容一樣看不懂,那說明你解析失敗了,注意檢查你打包的版本和你.dSYM的版本是否一樣。 最后祝你成功。
補:查看xx.app文件的uuid的方法:
dwarfdump --uuid xxx.app/xxx (xxx工程名)
查看xx.app.dSYM文件的uuid的方法令:
dwarfdump --uuid xxx.app.dSYM (xxx工程名)
而.crash的uuid位于,crash日志中的Binary Images:中的第一行尖括號內。如:armv7<8bdeaf1a0b233ac199728c2a0ebb4165>
dSYM工具下載
密碼:zr3e