在做這個項目時舟铜,一開始并未考慮收集用戶的崩潰日志,都是由用戶直接反饋崩潰問題給客服或是產(chǎn)品經(jīng)理氓侧,然后再交于開發(fā)進行修復(fù),掩面导狡,好菜喔~
于是詢問了幾個朋友约巷,平安證券和我是大美人,采用的是Crashlytics,365好睡眠采用的是bugly,友公司魔庫采用的是友盟的SDK旱捧,再查查資料独郎,于是決定選用Crashlytics.
由于自己英文好菜,最開始的導(dǎo)入枚赡,先查了一堆資料氓癌,到真正導(dǎo)入成功,才發(fā)現(xiàn)其實很簡單贫橙,只需要注冊一個Fabric的賬號贪婉,下載客戶端,按照客戶端的指引操作卢肃,十分簡單就可以集成了疲迂。
唯一需要注意的是星压,如果使用了友盟的shareSDK,那么集成Crashlytics,會出現(xiàn)如下錯誤:
網(wǎng)上給出的答案是:
問題在于友盟的Twitter中內(nèi)嵌了低版本的fabric鬼譬, 和Crashlytics沖突了 需要手動導(dǎo)入友盟分享的sdk。
Crashlytics使用十分簡單和方便逊脯,而且上傳了dSYM符號集优质,可以準(zhǔn)確的定位到崩潰在哪一行,十分欣喜~~~
關(guān)于dSYM符號集
進行崩潰分析军洼,首先要弄懂一個概念巩螃,就是符號集。
符號集是我們對ipa文件進行打包之后匕争,和.app文件同級的后綴名為.dSYM的文件避乏,這個文件必須使用Xcode進行打包才有。
每一個.dSYM文件都有一個UUID甘桑,和.app文件中的UUID對應(yīng)拍皮,代表著是一個應(yīng)用。而.dSYM文件中每一條崩潰信息也有一個單獨的UUID跑杭,用來和程序的UUID進行校對铆帽。
我們?nèi)绻皇褂?dSYM文件獲取到的崩潰信息都是不準(zhǔn)確的。
符號集中存儲著文件名德谅、方法名爹橱、行號的信息,是和可執(zhí)行文件的16進制函數(shù)地址對應(yīng)的窄做,通過分析崩潰的.Crash文件可以準(zhǔn)確知道具體的崩潰信息愧驱。
我們每次Archive一個包之后,都會隨之生成一個dSYM文件椭盏。每次發(fā)布一個版本组砚,我們都需要備份這個文件,以方便以后的調(diào)試庸汗。進行崩潰信息符號化的時候惫确,必須使用當(dāng)前應(yīng)用打包的電腦所生成的dSYM文件,其他電腦生成的文件可能會導(dǎo)致分析不準(zhǔn)確的問題蚯舱。
當(dāng)程序崩潰的時候改化,我們可以獲得到崩潰的錯誤堆棧,但是這個錯誤堆棧都是0x開頭的16進制地址枉昏,需要我們使用Xcode自帶的symbolicatecrash工具來將.Crash和.dSYM文件進行符號化陈肛,就可以得到詳細崩潰的信息。
崩潰分析
命令行解析Crash文件
通過Mac自帶的命令行工具解析Crash文件需要具備三個文件
symbolicatecrash兄裂,Xcode自帶的崩潰分析工具句旱,使用這個工具可以更精確的定位崩潰所在的位置阳藻,將0x開頭的地址替換為響應(yīng)的代碼和具體行數(shù)。
我們打包時產(chǎn)生的dSYM文件谈撒。
崩潰時產(chǎn)生的Crash文件腥泥。
我在解析崩潰信息的時候,首先在桌面上建立一個Crash文件夾啃匿,然后將.Crash蛔外、.dSYM、symbolicatecrash放在這個文件夾中溯乒,這樣進入這個文件夾下夹厌,直接一行命令就解決了。
symbolicatecrash我們可以在下面路徑下可以找到裆悄,我用的是Xcode7矛纹,其他版本Xcode路徑不一樣,請自行Google光稼。
1
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
然后Window->Organizer->Archives中或南,選中archive的版本右擊,選擇Show in Finder就可以獲取dSYM文件了钟哥。
dSYM文件
將.Crash迎献、.dSYM、symbolicatecrash三個文件都放在我們在桌面建立的Crash文件夾中腻贰。
Crash文件夾
開啟命令行工具吁恍,進入崩潰文件夾中
cd /Users/username/Desktop/崩潰文件夾
使用命令解析Crash文件
./symbolicatecrash ./.crash ./.app.dSYM > symbol.crash
如果上面命令不成功,使用命令檢查一下環(huán)境變量
xcode-select -print-path
返回結(jié)果:
/Applications/Xcode.app/Contents/Developer/
如果不是上面的結(jié)果播演,需要使用下面命令設(shè)置一下導(dǎo)出的環(huán)境變量冀瓦,然后重復(fù)上面解析的操作。
export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
解析完成后會生成一個新的.Crash文件写烤,這個文件中就是崩潰詳細信息翼闽。圖中紅色標(biāo)注的部分就是我們代碼崩潰的部分。
解析完成的結(jié)果
注意洲炊,以下情況不會有崩潰信息產(chǎn)生:
內(nèi)存訪問錯誤(不是野指針錯誤)
低內(nèi)存感局,當(dāng)程序內(nèi)存使用過多會造成系統(tǒng)低內(nèi)存的問題,系統(tǒng)會將程序內(nèi)存回收
因為某種原因觸發(fā)看門狗機制
通過Xcode查看設(shè)備崩潰信息
除了上面的系統(tǒng)分析工具來進行分析暂衡,如果是我們自己直接使用手機連接崩潰或者崩潰之后連接手機询微,選擇window-> devices -> 選擇自己的手機 -> view device logs 就可以查看我們的崩潰信息了撞叽。
view device logs
只要手機上的應(yīng)用是這臺電腦安裝打包的叉存,這樣的崩潰信息系統(tǒng)已經(jīng)為我們符號化好了,我們只需要進去之后等一會就行(不要相信這里面的進度刷新愁憔,并不準(zhǔn)確)唧领,如果還是沒有符號化完畢 藻雌,我們選擇文件雌续,然后右擊選擇Re-Sysbomlicate就可以。
如果是使用其他電腦進行的打包胯杭,我們可以在這里面將Crash文件導(dǎo)出驯杜,自己通過命令行的方式進行解析。