iOS根據堆棧信息查找崩潰位置

通常,我們使用全局斷點可以定位到崩潰的位置,但是在很多時候,我們無法具體定位到崩潰位置。比如
在這裏插入圖片描述
這個時候可以根據堆棧裏的內存地址來進行查找

一. dsym符號表的獲取

  1. 已經打包的項目
    xcode->window->organizer->右鍵你的應用 show finder->右鍵.xcarchive 顯示包內容->dSYMs->test.app.dYSM
    直接獲取dysm文件的路徑

  2. 本次運行的項目
    首先需要設置,編譯的時候生成dsym文件
    在這裏插入圖片描述
    然後進行編譯,編譯之後在文件夾中的products裏.app文件,show in finder
    在這裏插入圖片描述
    就可以看到對應的dsym文件,然後顯示包內容在這裏插入圖片描述
    找到最後這個文件在這裏插入圖片描述根據終端獲取dsym文件路徑,例如

/Users/macbook/Library/Developer/Xcode/DerivedData/xsgarage-ennepgdvsqiiebglcacoeaianzyh/Build/Products/Release-iphoneos/xsgarage.app.dSYM/Contents/Resources/DWARF/xsgarage 

二. 計算模塊地址

我們需要找到崩潰信息裏出現的模塊地址
挑出一行舉例,從左到右依次是:

13 xsgarage 0x000000010128f928 xsgarage + 5634344

二進制庫名(test),調用方法的地址(0x000000010128f928),模塊地址(xsgarage)+偏移地址(5634344)

  1. 將偏移地址轉換成十六進制
    進制轉換工具
    在這裏插入圖片描述
    5634344(十進制) = 55f928(十六進制)
  2. 計算模塊地址
    十六進制減法計算器

方法地址 - 偏移地址 = 模塊地址
在這裏插入圖片描述
據此得到模塊地址 0x100D30000

三. 使用atos命令來符號化某個特定模塊加載地址

atos [-arch 架構名] [-o 符號表] [-l 模塊地址] [方法地址]

架構名 - armv7/armv64/arm64其中可任選
符號表 - dsym文件的路徑
模塊地址 - 步驟二計算結果0x100D30000
方法地址 - 0x000000010128f928

atos -arch armv7 -o /Users/macbook/Library/Developer/Xcode/DerivedData/xsgarage-ennepgdvsqiiebglcacoeaianzyh/Build/Products/Release-iphoneos/xsgarage.app.dSYM/Contents/Resources/DWARF/xsgarage -l 0x100D30000 0x000000010125ae60

在這裏插入圖片描述
就此得到結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章