iOS如何將閃退日志符號化

Minion

這篇文章會介紹定位閃退的幾種方法,由易到難進行介紹。當你手里關(guān)于閃退的信息越多,解決就越簡單,反之,就會更難。

首先解釋下符號化的概念:符號化就是解決把?;厮莸刂忿D(zhuǎn)化為為源碼方法名或函數(shù)名的過程。符號化完成后,崩潰日志中所有的十六進制地址都轉(zhuǎn)化為了方法名函數(shù)名,方便開發(fā)人員定位bug.

1、在第三方平臺或者自研apm平臺獲取符號化后的日志

前提:

  1. 項目集成的三方收集日志的平臺,或者有自研的apm平臺;

  2. 打包同學在該平臺上傳了dysm文件。

這種方法是最簡單的,也不用過多介紹。很多項目都集成了bugly、友盟等等,大公司都會有自己的一套APM平臺。

2、利用Xcode查看崩潰信息

前提:

  1. 開發(fā)者手里有發(fā)生崩潰的手機;

  2. 手機上的應(yīng)用是這臺電腦安裝打包。

選擇window-> devices -> 選擇自己的手機 -> view device logs 就可以查看手機上所有的崩潰信息了。如果是使用其他電腦進行的打包,可以在這里面將Crash文件導出,自己通過命令行的方式進行解析(見方法3)。

WeChat7b227a7badf8de1ee1f36dd0fd1f9040.png

3、Mac自帶的命令行工具symbolicatecrash

前提:

  1. symbolicatecrash工具;

  2. .ips文件;

  3. dSYM文件;

1、如何獲取symbolicatecrash工具?

右鍵Xcode,顯示包內(nèi)容,通過以下路徑找到:/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash.

2、如何獲取.ips文件
  1. 可以通過真機連Xcode 導出:Xcode>Window>Devices and Simulators>選擇已連接的真機>View Device Logs>xxxApp>右鍵導出.crash文件;
  1. 手機->設(shè)置->隱私->分析與改進->分析數(shù)據(jù),找到對應(yīng)時間點的日志;
3、如何獲取dysm文件?
  1. 找到打包的那臺機器,打開Xcode.Window -> Organizer -> Archives -> 選中需要導出dSYM的Archive右擊 -> Show in Finder -> 右鍵.xcarchive文件顯示包內(nèi)容 -> dSYMs文件夾

  2. 大公司的打包平臺下載app的地方,就有對應(yīng)的dysm文件。

拿到以上,三個文件后,放到一個統(tǒng)一文件夾里。命令行cd 到該文件下,執(zhí)行以下命令:

./symbolicatecrash xxxxx.ips xxxxx.app.dSYM > crash.log

此時該目錄下,就會多出一個crash.log的文件,里面放的就是符號化后的解析日志。

如果報錯 Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69. 需要 執(zhí)行命令

export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
然后重新 輸入命令
./symbolicatecrash xxxxx.ips xxxxx.app.dSYM > crash.log

4、通過atos逐行解析堆棧

aa.png
根據(jù)對應(yīng)的Binary Images 是項目自己的二進制還是系統(tǒng)動態(tài)庫來區(qū)分
1、是項目里的二進制

直接執(zhí)行命令:

atos -arch arm64 -o 二進制名(圖中的2) -l 首地址(后面對應(yīng)的短的那個) 偏移地址(后面對應(yīng)長的那個)

2、是系統(tǒng)的動態(tài)庫

這個時候要根據(jù)日志中的iOS版本信息(圖中的1) 去符號表目錄下載對應(yīng)版本的符號信息。

下載好對應(yīng)版本的符號信息,把日志里對應(yīng)的動態(tài)庫(圖片中的3)拷到一個單獨文件內(nèi),命令行cd到對應(yīng)文件夾,執(zhí)行命令:

atos -arch arm64 Foundation.framework/Foundation -l 0x1830bc000 0x0000000183109f94

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容