崩潰日誌的符號化

2021-08-18 13:40:29 字數 1919 閱讀 5138

如果是通過xcode的archive打包,可通過以下路徑找到dsym檔案:

在終端進入dsym檔案所在路徑,執行以下命令(dsym檔案的路徑是xcarchive/dsyms/):

你將得到以下結果,它們分別對應32位、64位處理器的機子(iphone5s之前的機器為32位機):

而崩潰日誌的uuid位於日誌中binary images第一行尖括號內。如下面所示,

uuid一旦對應上了,就進入下一步,符號化。像上面舉的例子,uuid就沒對應上,不能進行符號化。

所謂區域性符號化,就是對崩潰日誌中的某乙個崩潰位址進行符號化,與全域性符號化相對應。這裡我們需要兩個位址,乙個是二進位制映象執行時載入的位址(後面簡稱段位址),乙個是崩潰**所在的呼叫棧位址。

以上面的崩潰日誌片段為例,「binary images:」後面跟著的 0x1029b0000 為段位址,結合下面擷取的崩潰日誌片段,崩潰時的呼叫棧位址是0x0000000102c124c4。

atos -arch arm64 -o 『dysm檔案路徑』 -l 段位址 呼叫棧位址1 呼叫棧位址2

按照上面的例子,此處命令應為:

該命令使用的引數:

終端輸出:

注意:

0x1029b0000 + 2499780 = 0x0000000102c124c4

使用以上方法進行符號化的範圍有限,效率太低,有沒有一次性對整個崩潰日誌進行符號化的操作,當然是有的,xcode本身就有提供這麼乙個工具。首先,找到這個工具,命令如下:

我的機子安裝的是xcode版本是9.3,終端輸出如下,這裡我使用的是最後乙個路徑的symbolicatecrash工具:

然後再執行:

如果不執行此命令,進行下面的操作時會報以下錯誤:

symbolicatecrash 崩潰日誌 dsym檔案 -o 輸出檔案

實際操作如下(符號化後的崩潰日誌將寫入該路徑下的processed.crash中):

如果設定alias失敗,可以使用方法二,把symbolicatecrash複製到操作路徑下,執行以下命令:

前面提到xcode提供了符號化工具,那麼我們可以直接使用xcode進行符號化嗎,答案當然是可以的。

如果是本機編譯的包,那麼開啟xcode->window->devices and simulators,選擇devices->view device logs,找到我們需要分析的crash檔案,一般情況下,這時候xcode已經替你自動符號化好了。如果沒有,可以右鍵crash檔案,選擇re-symbolicate log。

如果非本裝置的crash檔案,可以把crash檔案拖進去devicelogs列表,其他操作同上。

如果是非機編譯的包,我們需要把對應的dsym檔案放入某個資料夾下,然後執行手動索引命令 「mdimport 資料夾路徑「,如:

$ mdimport ~/crashanalyze
再回去xcode看,就可以看到符號化好的crash檔案了。借助這個方法,我們可以把所有版本的.dsym檔案,都放入該路徑下,然後把崩潰日誌集體拖入xcode中,這樣就可以實現批量符號化了,大大提供了工作效率。

注意:

進行該操作時,我只是建立了個空的crashanalyze資料夾,忘記把dsym檔案放進去,執行了mdimport命令之後,竟然也實現了自動符號化,原因不明。

現在更流行的,也是更適合團隊專案質量管控的做法,是使用crash report管理系統來管理crash,譬如國外的crashlytics,還有國內的bugtags。這些只要引入該第三方的sdk,進行啟動時註冊,然後在管理平台進行版本管理就可以了,此處就不進行詳述了。

參考:symbolicating your ios crash reports

iOS 崩潰日誌 Backtrace的符號化

ios的崩潰日誌配合dsym檔案可以找到崩潰時的backtrace,這是解決崩潰的最重要的資訊.如果是在同一臺mac上打包,匯入crash log時候會自動將backtrace符號化,可以看到方法名,檔名和行號 但是,有時候發版的包不是在你的mac上打包的,xcode找不到對應的符號表,backtr...

iOS 崩潰日誌 Backtrace的符號化

ios的崩潰日誌配合dsym檔案可以找到崩潰時的backtrace,這是解決崩潰的最重要的資訊.如果是在同一臺mac上打包,匯入crash log時候會自動將backtrace符號化,可以看到方法名,檔名和行號 但是,有時候發版的包不是在你的mac上打包的,xcode找不到對應的符號表,backtr...

iOS 崩潰符號化

1.符號表是什麼?dsym檔案其實是乙個目錄,在子目錄中包含了乙個16進製制的儲存函式位址對映資訊的中轉檔案,所有debug的symbols都在這個檔案中 包括檔名 函式名 行號等 所以也稱之為除錯符號資訊檔案。注意 來檢查 那如何知道crash檔案的uuid呢?可以用 grep 那麼,問題就來了!...