一、.dSYM
1.簡介
.dSYM(debugging SYMbols)又稱為調(diào)試符號表薛训,是蘋果為了方便調(diào)試和定位問題而使用的一種調(diào)試方案媒吗,本質(zhì)上使用的是起源于貝爾實(shí)驗(yàn)室的DWARF(Debugging With Attributed Record Formats),其在.xcarchive目錄中的層次結(jié)構(gòu)為:
2.確定符號表和崩潰日志的一致性
終端輸入:
xcrun dwarfdump --uuid /Users/xxxx/Desktop/xxxx.app.dSYM
即可獲取對應(yīng).dSYM文件的UUID乙埃,這個(gè)UUID必須與.crash文件中的UUID相匹配
二.通過.dSYM定位崩潰位置的三種方法
1. Symbolicatecrash
先介紹下Symbolicatecrash闸英,symbolicatecrash 是 Xcode 中自帶的perl腳本工具,通過iPhone的崩潰日志和應(yīng)用的.dSYM文件定位發(fā)生崩潰的位置介袜,把Crashed日志中的一堆地址替換成代碼相應(yīng)位置甫何。
xxx.crash 文件的內(nèi)容是十六進(jìn)制顯示的 ,給我們的分析排錯(cuò)造成很大阻力遇伞, 所以我們需要用到 symbolicatecrash 來符號化辙喂。
- 先在Mac 桌面創(chuàng)建一個(gè)新的文件夾,命名為crash
- 找到 symbolicatecrash文件鸠珠,拷貝 symbolicatecrash 到 crash文件夾中巍耗。
symbolicatecrash文件路徑為:
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
- 找到 .dSYM 文件和.ipa以及.crash log文件,拷貝到crash文件夾中
- 終端 cd 進(jìn)入 crash 渐排,執(zhí)行以下命令就可以生成最終的符號化的新 .crash 文件了
export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
./symbolicatecrash ./*.crash ./*.app.dSYM > analysis.crash
analysis.crash 需要自己命名炬太,這里使用的是 analysis
如果有報(bào)錯(cuò)可以使用以下命令,xxxx.crash 為原crash文件驯耻,再執(zhí)行以上步驟
./symbolicatecrash /Users/xxx/Desktop/Crash/xxxx.crash
符號化前:
符號化后:
2. crash反解析
xxx 0x0000000107fc24a4 0x104488000 + 62104740
0x104488000 符號表起始地址
0x0000000107fc24a4 崩潰發(fā)生運(yùn)行時(shí)地址
62104740 偏移量
0x0000000107fc24a4 = 0x104488000 + 62104740
運(yùn)行崩潰時(shí)堆棧地址 = 運(yùn)行時(shí)起始地址 + 偏移量
atos已經(jīng)封裝了地址尋找亲族,命令格式如下
atos -arch arm64 -o xxxx.app.dSYM/Contents/Resources/DWARF/xxxx -l 0x102134000 0x0000000106150124
既可以得到對應(yīng)崩潰的方法以及行號
-[TestVc doAdd:level:zIndex:] (in xxx) + 616
如果是armv7就把a(bǔ)rm64 換為armv7
3.dSYM工具
https://github.com/answer-huang/dSYMTools
使用起來比較簡單
- 將打包發(fā)布軟件時(shí)的xcarchive文件或者.dSYM文件拖入軟件窗口內(nèi)的任意位置
- 選中任意一個(gè)版本的xcarchive文件,或者.dSYM文件可缚,右邊會(huì)列出該xcarchive文件支持的CPU類型孽水,選中錯(cuò)誤對應(yīng)的CPU類型。
- 對比.crash給出的UUID和工具界面中給出的UUID是否一致城看。
-
將錯(cuò)誤地址以及 Slide Address 輸入工具的文本框中女气,點(diǎn)擊分析。