天天看點

iOS 用symbolicatecrash來符号化崩潰日志

//聯系人:石虎  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所使用的參數:

  1. -arch所運作裝置的架構,有arm64,armv7等等
  2. -l 二進制鏡像運作時加載的位址
  3. -o後面是符号檔案或者含有調試符号的可執行檔案(debug編譯所産生的可執行檔案預設是包含調試符号的.
  4. 再後面就是需要符号化的調用棧位址,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符号化每個調用棧位址。

謝謝!!!