移動分析支持通過符號表對 iOS App 的閃退日志進行反向解析,以便定位 App 中的問題代碼,幫助提高排查、解決線上異常問題的效率,同時提供 iOS 符號表管理功能以便導入、查詢符號表并進行符號表反解測試。
什么是符號表
符號表是內存地址與函數名、文件名、行號的映射表。符號表元素如下所示:
<起始地址> <結束地址> <函數> [<文件名:行號>]
iOS App 出現閃退時,閃退日志中的 Crash 堆棧為混淆后的二進制信息,需要通過符號表對這些二進制堆棧信息進行反向解析,將其轉換為可讀的函數名和行數,以便定位 App 中出現問題的代碼。
導入 iOS 符號表
對閃退日志進行符號反解前,要先上傳符號表。在 iOS 平臺中,dSYM 文件是保存符號表的目標文件,文件名通常為 xxx.app.dSYM
,建議每次構建或發布 App 的時候,備份好 dSYM 文件。
上傳 iOS 符號表的步驟如下:
在 dSYM 文件當前目錄下,通過 Linux 命令
tar -czvf symbol.tgz ./xxx.app.dSYM
將 dSYM 文件壓縮成 tgz 包。登錄 mPaaS 控制臺,選擇目標應用后,從左側導航欄進入 移動分析 > 性能分析 > iOS 符號表管理 頁面。
點擊 導入APP 符號表,在導入符號表彈窗中,輸入符號表信息,并上傳相應的符號表。
版本:App 版本號。
Module Name:iOS App 二進制文件名稱,存儲在符號表文件里面用來標識出對應的 App 二進制文件,以方便用戶匹配 App 二進制文件和 App 的符號表文件。
此處填寫 App 主 module 的 moduleName,例如打出的包是
Produce.app
, 那么 moduleName 為Produce
。UUID:通用唯一識別碼(Universally Unique Identifier,簡稱 UUID),是機器生成的唯一標識符。iOS 應用每次編譯時都會生成一個 UUID,為保證反解成功,堆棧的 UUID 和應用的符號表文件中的 UUID 必須保持一致(也就是來自同一次編譯)。還原 Crash 堆棧信息時,僅當導入的符號表文件的 UUID 與閃退日志中的 UUID 一致時,才能準確地對堆棧進行解析還原。
此處填寫 App 主 module 的 UUID,如果有多個,選擇其中一個填寫即可。例如有 armv7、arm64 兩種架構,則會有兩個 UUID,任選一個填寫即可。格式上,UUID 字符串需去掉“-”,并且全部小寫,例如:b7583434dc5e377bb4d8e7b69bf4c1fb。
上傳符號表:支持兩種上傳方式。
URL 上傳:輸入符號表壓縮后的 tgz 文件的 URL。如果指定 URL 下沒有符號表文件,會返回報錯信息。
本地上傳:上傳本地的符號表文件。
點擊 導入,導入符號表。
在 iOS 符號表管理頁面中查看符號表的導入狀態。如果符號表狀態為 Done,表示導入成功;如果為 Failed,則表示導入失敗,請根據錯誤提示重新導入符號表文件。
導入的符號表都將展示在符號表管理頁面,可根據 App 版本進行查詢。
反解測試
反解測試用于驗證導入的符號表文件是否有效。
反解測試的步驟如下:
在 iOS 符號表列表中,選擇導入成功的目標符號表,點擊操作列下的 反解測試。
在 原始日志文本 欄中輸入需要反解的閃退日志內容后,點擊 反解日志。日志反解結果 欄將顯示反解后的日志文本,如果反解失敗,會提供失敗原因,例如“UUID 不匹配”等。