iOS友盟崩潰地址解析 通過dSYM檔案分析定位線上 APP crash問題

-UP_UP-發表於2016-05-27

有很多問題是在開發測試過程中無法遇到和重現的,這就需要統計線上的崩潰資訊進行定位。

什麼是 dSYM

Xcode編譯專案後,我們會看到一個同名的 dSYM 檔案,dSYM 是儲存 16 進位制函式地址對映資訊的中轉檔案,我們除錯的 symbols 都會包含在這個檔案中,並且每次編譯專案的時候都會生成一個新的 dSYM 檔案,位於 /Users/<使用者名稱>/Library/Developer/Xcode/Archives 目錄下,對於每一個釋出版本我們都很有必要儲存對應的 Archives 檔案

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

友盟的崩潰資訊跟蹤

友盟的使用比較簡單,因為崩潰資訊中有提示的命令,前提是上線時是你本機的 Xcode 進行的上傳或匯出工作,因為這樣才會有dSYM檔案。

首先開啟友盟的崩潰統計,找到要定位的 bug,點選綠色的記憶體地址,就會彈出一個彈框,拷貝彈框中的命令
友盟

然後開啟Mac命令列, 將拷貝的命令貼上進去,按 return 鍵執行,如果解析成功的話,就會列印出崩潰資訊了,方法、檔案、行數等。
資訊

其他崩潰統計或不是自己打包

如果使用的是其他的崩潰統計服務或者當時並不是自己打包的,只有崩潰資訊的記憶體地址,可以使用下面的辦法。

首先,找到當時archive的.xcarchive檔案。
如果是本機進行的archive,那麼在

/Users/username/Library/Developer/Xcode/Archives

目錄下會找到所有的archive檔案,該目錄是預設的存放目錄,如果這是公司的辦公本,並且你沒有在該目錄下找到最近的檔案,則有可能是 Xcode 的設定被更改了。
開啟 Xcode 首選項,選擇最右側的 locations,就可以看到 Xcode 的相關檔案存放路徑,點選箭頭即可開啟檔案位置。
archive 檔案路徑

如果並不是本機進行的 archive,那麼找到當時的電腦或則從同事那裡拷貝到archive也是可以的。

好的,archive檔案已經找到,下面就可以進行定位了。
右鍵archive檔案 選擇 顯示包內容,然後選擇 dSYMs 資料夾裡的.dSYM 檔案再次顯示包內容,然後會找到一個 DWARF 的資料夾,保持該 Finder 視窗開啟
archive包內容

dsym

最終路徑

第三步,開啟終端,先輸入 cd,然後選中將DWARF資料夾拖到終端視窗上,會看到 cd 後面自動加上了DWARF資料夾的路徑,按 return 鍵進入該目錄下
最後在終端裡輸入如下命令

atos -arch arm64 -o Xcode 專案名稱 記憶體地址
例如
atos -arch arm64 -o  test-IOS 0x1001cb988

按 return 鍵執行就會列印出該記憶體地址的具體檔案、方法以及行數等資訊,找到崩潰的位置就知道可能的原因以及解決方法了!
檔案資訊

相關文章