//聯系人:石虎 QQ: 1224614774昵稱:嗡嘛呢叭咪哄
一、用symbolicatecrash來符号化崩潰日志
1.崩潰日志
symbolicatecrash demo1.crash Demo1.app.dSYM -o processed.crash
2.符号化後的crash檔案将會被寫入processed.crash中,
然後我們來看看如果把Demo1.app.dSYM去掉會怎樣,為了看到符号化的過程,我們可以加上 -v
symbolicatecrash demo1.crash -o processed.crash -v
3.我們主要看Demo1的符号化過程,其他系統調用其實也會在這個過程中被符号化。#後面是我添加的注釋
-- [2cf1790547ff3a1cac055152319617ba] fetching symbol file for Demo1 #開始尋找Demo1的符号檔案
Running mdfind "com_apple_xcode_dsym_uuids == 2CF17905-47FF-3A1C-AC05-5152319617BA" #使用Spotlight搜尋uuid為2CF17905-47FF-3A1C-AC05-5152319617BA的dsym檔案
#接下來是使用file,lipo,otool等來分析dSYM的相關資訊
.
-- [2cf1790547ff3a1cac055152319617ba] MATCH(spotlight): ... #确認找到對應的dSYM檔案
.
atos -arch arm64 -l 0x10006c000 -o '..../Demo1.app.dSYM/Contents/Resources/DWARF/Demo1' 0x00000001000706e8 0x0000000100070a80
我們看到最後會發現實際上symbolicatecrash是使用atos來尋找調用棧位址對應的調試符号的。
二、我們來看一下atos所使用的參數:
- -arch所運作裝置的架構,有arm64,armv7等等
- -l 二進制鏡像運作時加載的位址
- -o後面是符号檔案或者含有調試符号的可執行檔案(debug編譯所産生的可執行檔案預設是包含調試符号的.
- 再後面就是需要符号化的調用棧位址,5 Demo1 0x00000001000706e8 0x10006c000 + 18152,0x00000001000706e8就是其中的一個位址。
三、二進制鏡像運作時加載的位址通過如下方式獲得
Binary Images:
0x10006c000 - 0x100073fff Demo1 arm64 <2cf1790547ff3a1cac055152319617ba> /var/mobile/Containers/Bundle/Application/7E6DE925-0B33-4699-89F7-05381876AD81/Demo1.app/Demo1
中的0x10006c000就是這個崩潰日志所對應的二進制鏡像加載位址。
綜上所述,symbolicatecrash主要幫我們做了兩件事情,比對到對應的dSYM檔案,使用atos符号化每個調用棧位址。
謝謝!!!