1. 程式人生 > 實用技巧 >【轉】dSYM,app,crash 檔案 UUID 匹配

【轉】dSYM,app,crash 檔案 UUID 匹配

原文網址:https://blog.csdn.net/mtc1256/article/details/52596930

什麼是 dSYM 檔案

Xcode編譯專案後,我們會看到一個同名的 dSYM 檔案,dSYM 是儲存 16 進位制函式地址對映資訊的中轉檔案,我們除錯的 symbols 都會包含在這個檔案中,並且每次編譯專案的時候都會生成一個新的 dSYM 檔案,位於 /Users/<使用者名稱>/Library/Developer/Xcode/Archives 目錄下,對於每一個釋出版本我們都很有必要儲存對應的 Archives 檔案 ( AUTOMATICALLY SAVE THE DSYM FILES 這篇文章介紹了通過指令碼每次編譯後都自動儲存 dSYM 檔案)。

dSYM 檔案有什麼作用

當我們軟體 release 模式打包或上線後,不會像我們在 Xcode 中那樣直觀的看到用崩潰的錯誤,這個時候我們就需要分析 crash report 檔案了,iOS 裝置中會有日誌檔案儲存我們每個應用出錯的函式記憶體地址,通過 Xcode 的 Organizer 可以將 iOS 裝置中的 DeviceLog 匯出成 crash 檔案,這個時候我們就可以通過出錯的函式地址去查詢 dSYM 檔案中程式對應的函式名和檔名。大前提是我們需要有軟體版本對應的 dSYM 檔案,這也是為什麼我們很有必要儲存每個釋出版本的 Archives 檔案了。

如何將檔案一一對應

每一個 xx.app 和 xx.app.dSYM 檔案都有對應的 UUID,crash 檔案也有自己的 UUID,只要這三個檔案的 UUID 一致,我們就可以通過他們解析出正確的錯誤函式資訊了。

1.檢視 xx.app 檔案的 UUID,terminal 中輸入命令 :
dwarfdump –uuid xx.app/xx (xx代表你的專案名)

2.檢視 xx.app.dSYM 檔案的 UUID ,在 terminal 中輸入命令:
dwarfdump –uuid xx.app.dSYM

3.crash 檔案內第一行 Incident Identifier 就是該 crash 檔案的 UUID ( 這裡原文表述不正確,請看以下程式碼)


dSYM

$ dwarfdump --uuid AppName.app.dSYM/
UUID: 8FFE6FA9-5DC6-3D54-8C16-4D267AA315A5 (arm64) AppName.app.dSYM/Contents/Resources/DWARF/AppName

.app

$ dwarfdump --uuid AppName.app/AppName
UUID: 8FFE6FA9-5DC6-3D54-8C16-4D267AA315A5 (arm64) AppName.app/AppName

.crash 檔案

$ grep "AppName arm64" t.crash
0x100020000 - 0x10123bfff AppName arm64  <8ffe6fa95dc63d548c164d267aa315a5> /var/containers/Bundle/Application/A9D19DFA-9553-412B-A124-F07B0DEE01CF/AppName.app/AppName

這樣才看出三個檔案的確是匹配的.而不是原來友盟說的crash 檔案第一行