1. 程式人生 > 實用技巧 >ios crash分析,鎖定出問題的程式碼行數

ios crash分析,鎖定出問題的程式碼行數

定位crash最重要的是復現問題,或者獲取出現問題的crash檔案。

如果根據使用者或者測試提供的操作手順,我們也可以復現問題,那就簡單了,直接去device logs中獲取crash資訊。

如下圖:

首先我們找到crash執行緒,可見Thread 1為出問題執行緒,然後根據堆疊資訊,鎖定最上面的一行"0x0000000104a5cc30 0x104484000 + 6130736"為出問題程式碼。

有了crash的log,接下來需要根據dSYM檔案,找到對應程式碼。至於dSYM檔案的作用,大家可以自行百度,解釋的非常詳細。如果你是負責出版本提交appstore的,一定要注意儲存每次提交程式碼的dSYM檔案。

在哪找dSYM呢?

一般在Organizer中,對你Uploaded的版本,點選右鍵“Show in Finder”,然後對xcarchive檔案”顯示包內容“。你的dSYM就靜靜躺在dSYMs目錄中

理論上在Organizer對版本點選Download Debug Symbols也可以到處,不過我是沒成功過,網上有人說是xcode 的bug。

如果你沒有生成dSYM檔案,也不用慌,開啟xcode中的”Build Settings“,找到”Debug Information Format“確保如圖:

如果不是手動修改,這裡預設就是和圖片一樣的。

好的,dSYM和crash都齊了,接下來就簡單了。

將這兩個檔案放到一個資料夾中,在終端輸入如下命令:

atos -o yourapp.app.dSYM/Contents/Resources/DWARF/yourapp -arch arm64 -l 0x104690000 0x0000000104c68d48

其中0x104690000和0x0000000104c68d48是我們在crash.log獲取到的崩潰地址。

輸入後輸出如下:

結合我的程式碼,是不是感覺生活如此美好。

除了atos,還有lldb和更高階的dwarfdump也能用來定位crash。這裡就不展開了。