圖形化還原崩潰地址 iOS的crash檔案分析

_阿南_發表於2018-12-05

crash-圖片來之網路

沒有不會crash的app包括微信

沒有不會crash的程式碼即使正常執行千年

只要有會看crash的程式猿

這一週是在不同的crash日誌分析中度過的,公司的4個專案依次出現不同程式的隨機崩潰。並且出現了非常多的靈異事件,即使看到了現象程式猿(!_! ME)也很難相信這是真的(想逃避)。當赤裸裸的現象一次又一次出現,直接導致手心出汗,精神失常(對於10年開發的我是致命的羞辱)。拿出斧頭開始啃著“天外來客”。

考慮篇幅和閱讀時長的習慣,在此略過以下內容:

  1. crash檔案採集的具體步驟。
  2. crash檔案中內容的含義解釋。
  3. crash檔案中崩潰種類的說明。
  4. dsym檔案的來源和作用。
  5. crash中崩潰地址的手動解析的方法。
  6. 等等可以百度的內容。

記錄下怎麼圖形化一步還原崩潰地址為可讀程式碼的方法。

一、 Xcode還原法

最簡單的方法是,提交app到app store的時候使用Xcode直接提交併且勾選上傳dsym。如圖

上傳到app store
之後每週來檢視一次崩潰日誌
崩潰日誌
Xcode已經直接圖形化崩潰日誌,並且有完整的呼叫棧。 **注意:**將程式碼回退到上傳時的分支和相同commit處,不然指向的程式碼行錯誤。 DONE

二、 友盟還原法

1. 檢視崩潰

使用友盟統計的功能也包含crash的採集,並且crash日誌會在app重啟後立刻上傳,時效性較好。

crash
檢視到形形色色的crash資訊,建議升級到友盟最新版本,使得采集資訊更加的準確。 檢視一個崩潰詳情,可以檢視崩潰的呼叫棧,但是涉及到APP相關的,顯示的只是64位的地址內容而不是方法名和行數。
崩潰詳情

2. 檢視dsym檔案

需要上傳崩潰檔案對應的dsym,此時需要先檢視崩潰日誌對應的UUID

UUID
根據UUID查詢dsym檔案,如果沒有使用bitcode那麼直接在archive資料夾中可以找到。應該沒有不用bitcode的吧,誰用誰知道它的好。 開啟了bitcode那麼需要到App Store Connect下載
DSYM
下載後看到一堆的dSYM檔案,檔名前面的一段就是UUID。
dSYM
此時UUID和對應的dSYM都有了。

3. 上傳dsym檔案

到友盟iOS專案,選擇"應用設定"後,選著左邊的“符號表管理”,再點選“上傳符號表檔案”

上傳dsym
選擇指定的版本號後上傳,上傳成功後會顯示解析完成。

4. 檢視符號的崩潰呼叫棧

已經完美的完成解析了。如果你找到了對的dSYM檔案的話,不然就SO SO SO (無能為力)

解析完成
可以很輕鬆的找到崩潰的地方,然後慢慢修改吧。 並且反省下為何為崩潰。

DONE

三、 SYM工具還原法

推薦dSYM的解析工具 SYM. 此方法針對從裝置上獲取crash檔案後解析,使用非常給力。

1. 裝置獲取crash檔案

連線裝置到電腦後,開啟Xcode選擇Window下Devices and Simulators

檢視裝置日誌
在當前裝置,可以看到裝置上所有的崩潰,你應該知道自己app的名稱吧。 ^_^
所有的崩潰日誌檔案
將崩潰日誌全部選中,然後複製。

2. 查詢UUID

在崩潰日誌中搜尋“Binary Images”,會看到app的名稱,旁邊的就是UUID了。

UUID

3. SYM分析

開啟SYM app後,(1)將崩潰日誌複製到內容中。(2)選擇UUID對應的dSYM檔案。 (3)點選執行按鈕。

完成

檢視紅色的就是解析完成的,並且準確無誤。GOOD。


後記

可能你沒看懂,沒關係請多看幾遍。 如果對crash還是沒了解,沒關係再百度下。 也許你會推薦“DSYMTools”這個工具,我也一直用了5年,一直都很好用。只是最近分析出的內容不準確。所以建議你試試我介紹的方法。 另外再強調一點使用第三方庫請慎重

補充一句

Android在友盟上也一樣可以進行崩潰地址的解析,同樣上傳mapping檔案就可以實現。

// END 2018-11-30 每天進步一點點

相關文章