通常,我們使用全局斷點可以定位到崩潰的位置,但是在很多時候,我們無法具體定位到崩潰位置。比如
這個時候可以根據堆棧裏的內存地址來進行查找
一. dsym符號表的獲取
-
已經打包的項目
xcode->window->organizer->右鍵你的應用 show finder->右鍵.xcarchive 顯示包內容->dSYMs->test.app.dYSM
直接獲取dysm文件的路徑 -
本次運行的項目
首先需要設置,編譯的時候生成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)
方法地址 - 偏移地址 = 模塊地址
據此得到模塊地址 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
就此得到結果。