使用symbolicatecrash分析crash文件,需要從奔潰設(shè)備拿到的是.crash 文件(這個(gè)比較困難),.dSYM文件需要保存好在Archives下
iOS app的所有崩潰記錄都會(huì)記錄在設(shè)備上,所以對(duì)于和我一樣沒(méi)有集成讓用戶(hù)發(fā)送崩潰報(bào)告功能的iOS開(kāi)發(fā)者來(lái)說(shuō),要獲得crash文件就必須先連上崩潰過(guò)的機(jī)器,然后打開(kāi)Xcode,選擇Window -> Devices(如果是Xcode6以下,則是Window -> Organizer -> Devices),選擇你自己的機(jī)器,然后點(diǎn)擊View Device Logs,這時(shí)候會(huì)打開(kāi)一個(gè)小窗口,這就是你機(jī)器上至目前為止存的所有app的崩潰信息了。如果是好久沒(méi)看過(guò)這個(gè)信息,打開(kāi)后還要讀取好久才能完全讀完,總之,找到你的app最后一次崩潰記錄,右鍵導(dǎo)出。(先不要在意下圖的信息,我只是隨便找了一個(gè))
導(dǎo)出來(lái)的.crash文件,上半部分都是一些基本信息(基本沒(méi)用),重點(diǎn)看下崩潰部分的記錄,如下圖
看紅框里的,很像是數(shù)組越界之類(lèi)的問(wèn)題,先在桌面上建個(gè)文件夾crash,然后把這個(gè)導(dǎo)出的.crash文件扔進(jìn)去。
找到上次發(fā)布的ipa(如果實(shí)在沒(méi)有了就再?gòu)腁rchives里導(dǎo)出來(lái)一個(gè),但一定要保證是你上次發(fā)布用的那個(gè)),右鍵 -> 打開(kāi)方式 -> 歸檔實(shí)用工具(就是解壓縮),然后把Payload文件夾下的.app文件也扔到剛剛的crash文件夾里。
接下來(lái)還需要dSYM文件,還是在Archives里,找到發(fā)布用的那個(gè),右鍵Show in Finder,如圖
然后對(duì)文件夾中的這個(gè).xcarchive文件右鍵,顯示包內(nèi)容,就可以看到一個(gè)名為dSYMs的文件夾,把里面的.dSYM文件拷出來(lái),還是放到桌面的crash文件夾里。好了,還剩一個(gè)重頭了,就是標(biāo)題上說(shuō)的symbolicatecrash工具。
symbolicatecrash是一個(gè)隱藏工具,它在我的Mac中的具體路徑如下
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
你也可以在終端中輸入命令搜索:
find /Applications/Xcode.app -name symbolicatecrash -type f
把這個(gè)路徑拷貝一下,然后粘到Finder的“前往文件夾”下,前往,就可以看到symbolicatecrash工具了,現(xiàn)在把它也拷到桌面的crash文件夾里。至此,crash文件夾里現(xiàn)在有4個(gè)文件了,分別是.app, .crash, .dSYM, symbolicatecrash。接下來(lái)就是用終端敲命令,生成更易分析的crash。
首先用cd命令進(jìn)入到crash文件夾下,然后輸入以下命令
./symbolicatecrash /Users/xxxx/Desktop/crash/InOrder.crash /Users/xxxx/Desktop/crash/appnameapp.dSYM > Control_symbol.crash
命令中,"xxxx"請(qǐng)自行替換成對(duì)應(yīng)的名稱(chēng)。運(yùn)行,這時(shí)候終端可能會(huì)報(bào)錯(cuò)Error: "DEVELOPER_DIR" is not defined at /usr/local/bin/symbolicatecrash line 53. 這時(shí)候在終端中再輸入如下
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
然后再跑一下剛剛的那個(gè)命令,這時(shí)候看一下桌面的crash文件夾下就會(huì)多出一個(gè)名為“Control_symbol.crash”的文件,這就是可定位問(wèn)題的crash文件了,我們打開(kāi)看一下
現(xiàn)在紅框里原來(lái)的那些亂七八糟的東西已經(jīng)“翻譯”成了崩潰在具體的哪一個(gè).m文件的哪一行。下面就是進(jìn)行合理的猜想和調(diào)試了,比如我的崩潰就是因?yàn)檫@個(gè)第三方時(shí)間選擇控件使用截取字符串的形式來(lái)獲得時(shí)間,像09:23 PM就被固定的拆成了時(shí)、分、上下午標(biāo)識(shí)3段,結(jié)果用戶(hù)使用24小時(shí)制的時(shí)候,時(shí)間就成了21:23,沒(méi)了上下午標(biāo)識(shí),array[2]超出下標(biāo)妥妥的閃退。