移動分析支援通過符號表對 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 版本號碼。
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 不匹配”等。