//聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄
一、用symbolicatecrash來符號(hào)化崩潰日志
1.崩潰日志
symbolicatecrash demo1.crash Demo1.app.dSYM -o processed.crash
2.符號(hào)化后的crash文件將會(huì)被寫入processed.crash中,
然后我們來看看如果把Demo1.app.dSYM去掉會(huì)怎樣,為了看到符號(hào)化的過程,我們可以加上-v
symbolicatecrash demo1.crash -o processed.crash -v
3.我們主要看Demo1的符號(hào)化過程,其他系統(tǒng)調(diào)用其實(shí)也會(huì)在這個(gè)過程中被符號(hào)化。#后面是我添加的注釋
--[2cf1790547ff3a1cac055152319617ba]fetching symbol file for Demo1? ? #開始尋找Demo1的符號(hào)文件
Running mdfind "com_apple_xcode_dsym_uuids == 2CF17905-47FF-3A1C-AC05-5152319617BA"? ? #使用Spotlight搜索uuid為2CF17905-47FF-3A1C-AC05-5152319617BA的dsym文件
#接下來是使用file,lipo,otool等來分析dSYM的相關(guān)信息
.
--[2cf1790547ff3a1cac055152319617ba]MATCH(spotlight): ...? #確認(rèn)找到對(duì)應(yīng)的dSYM文件
.
atos -arch arm64 -l 0x10006c000 -o '..../Demo1.app.dSYM/Contents/Resources/DWARF/Demo1' 0x00000001000706e8 0x0000000100070a80
我們看到最后會(huì)發(fā)現(xiàn)實(shí)際上symbolicatecrash是使用atos來尋找調(diào)用棧地址對(duì)應(yīng)的調(diào)試符號(hào)的。
二、我們來看一下atos所使用的參數(shù):
-arch所運(yùn)行設(shè)備的架構(gòu),有arm64,armv7等等
-l二進(jìn)制鏡像運(yùn)行時(shí)加載的地址
-o后面是符號(hào)文件或者含有調(diào)試符號(hào)的可執(zhí)行文件(debug編譯所產(chǎn)生的可執(zhí)行文件默認(rèn)是包含調(diào)試符號(hào)的.
再后面就是需要符號(hào)化的調(diào)用棧地址,5? Demo1 ? ? 0x00000001000706e8 0x10006c000 + 18152,0x00000001000706e8就是其中的一個(gè)地址。
三、二進(jìn)制鏡像運(yùn)行時(shí)加載的地址通過如下方式獲得
Binary Images:
0x10006c000 - 0x100073fff Demo1 arm64? <2cf1790547ff3a1cac055152319617ba> /var/mobile/Containers/Bundle/Application/7E6DE925-0B33-4699-89F7-05381876AD81/Demo1.app/Demo1
中的0x10006c000就是這個(gè)崩潰日志所對(duì)應(yīng)的二進(jìn)制鏡像加載地址。
綜上所述,symbolicatecrash主要幫我們做了兩件事情,匹配到對(duì)應(yīng)的dSYM文件,使用atos符號(hào)化每個(gè)調(diào)用棧地址。
謝謝!!!