在開發(fā)中很多項目使用了類似友盟統(tǒng)計的第三方統(tǒng)計工具,這樣可以在友盟給出的錯誤信息統(tǒng)計中比較方便的找出客戶端異常的信息蹋笼,可是很多像數(shù)組越界卻只給出了
*** -[__NSArrayM objectAtIndex:]: index 50 beyond bounds [0 .. 39]
這類錯誤信息铣猩。遇到這種問題如果通過 objectAtIndex 去檢索報錯代碼位置的話珊随,那工作量巨大劳殖。
dSYM 文件
Xcode編譯項目后,我們會看到一個同名的 dSYM 文件鞭铆,dSYM 是保存 16 進(jìn)制函數(shù)地址映射信息的中轉(zhuǎn)文件或衡,我們調(diào)試的 symbols 都會包含在這個文件中,并且每次編譯項目的時候都會生成一個新的 dSYM 文件车遂,位于 /Users/<用戶名>/Library/Developer/Xcode/Archives 目錄下封断,對于每一個發(fā)布版本我們都很有必要保存對應(yīng)的 Archives 文件 (AUTOMATICALLY SAVE THE DSYM FILES 這篇文章介紹了通過腳本每次編譯后都自動保存 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 文件了教沾。
每一個 xx.app 和 xx.app.dSYM 文件都有對應(yīng)的 UUID,crash 文件也有自己的 UUID译断,只要這三個文件的 UUID 一致授翻,我們就可以通過他們解析出正確的錯誤函數(shù)信息了。
dSYM 工具
dSYMTools 將這些命令封裝到一個Mac OS版應(yīng)用中孙咪,為以后查找定位bug提供了便利堪唐。
使用步驟:
選中任意一個版本的xcarchive文件,右邊會列出該xcarchive文件支持的CPU類型翎蹈,選中錯誤對應(yīng)的CPU類型淮菠。
對比錯誤給出的UUID和統(tǒng)計工具中給出的UUID是否一致。
將錯誤地址以及 Slide Address 輸入工具的文本框中荤堪,點擊分析合陵。