有時候線上版本出現(xiàn)崩潰, 我們會使用bugly
來捕獲崩潰
點開之后可以很方便地看到調(diào)用堆棧, 但這個并沒有告訴我們崩潰究竟出現(xiàn)在哪里
這時候, 我們就要使用DSYMTools
這個工具
下載地址
什么是 dSYM
文件
Xcode編譯項目后磺樱,我們會看到一個同名的 dSYM 文件
dSYM 是保存 16 進制函數(shù)地址映射信息的中轉(zhuǎn)文件
我們調(diào)試的symbols
都會包含在這個文件中凄贩,并且每次編譯項目的時候都會生成一個新的 dSYM
文件,位于/Users/<用戶名>/Library/Developer/Xcode/Archives
目錄下呛讲,對于每一個發(fā)布版本我們都很有必要保存對應(yīng)的Archives
文件
dSYM
文件有什么作用
當(dāng)我們軟件release
模式打包或上線后,不會像我們在Xcode
中那樣直觀的看到用崩潰的錯誤渣玲,這個時候我們就需要分析crash report
文件了箱舞,iOS
設(shè)備中會有日志文件保存我們每個應(yīng)用出錯的函數(shù)內(nèi)存地址,通過 Xcode
的 Organizer
可以將iOS
設(shè)備中的 DeviceLog
導(dǎo)出成 crash
文件掏导,這個時候我們就可以通過出錯的函數(shù)地址去查詢 dSYM
文件中程序?qū)?yīng)的函數(shù)名和文件名。大前提是我們需要有軟件版本對應(yīng)的dSYM
文件羽峰,這也是為什么我們很有必要保存每個發(fā)布版本的Archives
文件了
如何將文件一一對應(yīng)
每一個xx.app
和 xx.app.dSYM
文件都有對應(yīng)的 UUID
趟咆,crash
文件也有自己的UUID
,只要這三個文件的UUID
一致梅屉,我們就可以通過他們解析出正確的錯誤函數(shù)信息了值纱。
好了, 我們看看這個軟件究竟怎么用:
運行之后, 我們發(fā)現(xiàn)這個界面:
這時候, 你要選中, 你打包的dSYM
文件
dSYM
文件的UUID
和app
的UUID
, 以及最后bugly
上的UUID
要一致
然后你只要填寫默認(rèn)的slide address
和錯誤信息內(nèi)存地址就可以了
比如此時你想查看紅色區(qū)域的出錯位置:
- 那么
slide address
就是0x0000000100a20000
- 將
0x0000000100a20000
轉(zhuǎn)換成十進制, 即4305584128
- 然后再加上旁邊的偏移量
+ 5258872
, 即4305584128+ 5258872 = 4310843000
- 最后, 將
4310843000
再轉(zhuǎn)換成十六進制即可, 即0x100F23E78
, 那么錯誤信息內(nèi)存地址就填上0x100F23E78
當(dāng)所有信息都填好的時候, 點擊分析按鈕, 我們就可以知道可能錯誤的地方了,
如果可能的話, 這個工具甚至可以告訴你出錯發(fā)生在哪個文件的哪一行, 非常方便