iOS Crash調(diào)試和Crash符號(hào)化

SIGABRT

一個(gè)數(shù)組越界報(bào)的崩潰場(chǎng)景


數(shù)組越界.png

一點(diǎn)毛用都沒有,它并不能精確的定位到crash發(fā)生在哪個(gè)源文件哪行代碼中。為了精確的定位,我們可以使用Exception Breakpoint在Exception發(fā)生的時(shí)候暫停程序。


全局?jǐn)帱c(diǎn).png
準(zhǔn)確定位.png

EXC_BAD_ACCESS的Crash

EXC_BAD_ACCESS 大部分是訪問已被釋放的內(nèi)存導(dǎo)致,與SIGABRT不同,發(fā)生EXC_BAD_ACCESS錯(cuò)誤時(shí),在控制臺(tái)里你不會(huì)得到一個(gè)錯(cuò)誤的信息。

EXC_BAD_ACCESS.png

但是你可以通過一些設(shè)置得到這些錯(cuò)誤信息并進(jìn)一步定位內(nèi)存錯(cuò)誤發(fā)生的位置??旖萱IShift+command+< ,調(diào)出Edit scheme視圖,勾選Enable zombie object,再次運(yùn)行,便有一些有用的信息提示。
Edit scheme.png

屏幕快照 2016-07-21 下午3.38.01.png

message sent to deallocated instance 0x7fca5bca5690,這句話大概意思就是使用了一個(gè)被釋放的對(duì)象。
注意:當(dāng)你把選項(xiàng)Zombie Objects打開的時(shí)候,你的應(yīng)用程序永遠(yuǎn)不會(huì)再釋放(dealloc)內(nèi)存,會(huì)導(dǎo)致不停的內(nèi)存泄漏并最終在某一時(shí)刻run out of free memory,所以不要一直開著Zombie Objects選項(xiàng),只有當(dāng)你定位EXC_BAD_ACCESS錯(cuò)誤的時(shí)候打開它,當(dāng)bug解決掉之后,立刻關(guān)閉它。

獲取Crash Log

很多測(cè)試人員在測(cè)試途中,或者開發(fā)者在自測(cè)的途中,會(huì)遇到APP crash的情況。一般的bug,一個(gè)合格的測(cè)試可以給出明確的重現(xiàn)步驟讓開發(fā)者清晰地知道bug原因;也有不少bug,很多時(shí)候是偶現(xiàn)的,很可能無法再次重現(xiàn)出來,無法重現(xiàn)出來的bug是開發(fā)者頭疼的,測(cè)試一般會(huì)給出bug的截圖和重現(xiàn)步驟;而一般crash是比較嚴(yán)重的問題了,這個(gè)時(shí)候崩潰日志就尤為重要了,把崩潰日志send給開發(fā)人員,如此才能讓開發(fā)者快速定位到錯(cuò)誤的原因和位置。

那么測(cè)試如何拿到crash日志呢?

  • 方法一:設(shè)備與電腦上的iTunes Store同步后,會(huì)將崩潰日志保存在電腦上。根據(jù)電腦操作系統(tǒng)的不同,崩潰日志將保存在以下位置:
Mac : ~/Library/Logs/CrashReporter/MobileDevice/<DEVICE_NAME>

這個(gè)時(shí)候你會(huì)發(fā)現(xiàn)一大堆的.crash文件和.ips文件


屏幕快照 2016-07-21 下午4.29.15.png
  • 方法二:通過Xcode獲取到崩潰日志,方法是Xcode->Window->Devices
1168978-2402f1965a1e11e5.png.jpeg

Crash Log的符號(hào)化

獲取到了.crash或者.ips文件的時(shí)候(憋糾結(jié)這兩個(gè)文件有什么差,改下后綴名就ok),用文本編輯器打開文件是一堆十六進(jìn)制的內(nèi)存地址,你會(huì)郁悶的發(fā)現(xiàn)壓根看不懂。點(diǎn)擊解讀

屏幕快照 2016-07-21 下午4.19.58.png

我在解析崩潰信息的時(shí)候,首先在桌面上建立一個(gè)Crash文件夾,然后將.Crash、.dSYM、symbolicatecrash放在這個(gè)文件夾中,這樣進(jìn)入這個(gè)文件夾下。

  • crash log的獲取
    在上圖上右鍵你要導(dǎo)出的Crash文件日志。
  • dSYM 符號(hào)集的獲取

我們每次Archive一個(gè)包之后,都會(huì)隨之生成一個(gè)dSYM文件。每次發(fā)布一個(gè)版本,我們都需要備份這個(gè)文件,以方便以后的調(diào)試。進(jìn)行崩潰信息符號(hào)化的時(shí)候,必須使用當(dāng)前應(yīng)用打包的電腦所生成的dSYM文件,其他電腦生成的文件可能會(huì)導(dǎo)致分析不準(zhǔn)確的問題。

選中archive的版本右擊,選擇Show in Finder就可以選中archived 文件然后顯示包內(nèi)容,就可以找到dSYM文件了。

導(dǎo)出dSYM文件.png
  • symbolicatecrash 工具的獲取
    symbolicatecrash,Xcode自帶的崩潰分析工具,使用這個(gè)工具可以更精確的定位崩潰所在的位置,將0x開頭的地址替換為響應(yīng)的代碼和具體行數(shù)。
    symbolicatecrash我們可以在下面路徑下可以找到,我用的是Xcode7。
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

這樣三個(gè)文件都齊備好后,就開始進(jìn)行解析的工作了。


三個(gè)文件.png
  • ** 命令解析 **
    開啟命令行工具,進(jìn)入崩潰文件夾crash中
cd /Users/自己MacPro上的名字/Desktop/崩潰文件夾crash

使用命令解析Crash文件,*號(hào)指的是具體的文件名

./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

解析完成后會(huì)生成一個(gè)新的.Crash文件,這個(gè)文件中就是崩潰詳細(xì)信息。圖中紅色標(biāo)注的部分就是我們代碼崩潰的部分。


符號(hào)化后的結(jié)果

參考文章

命令行工具解析Crash文件,dSYM文件進(jìn)行符號(hào)化
iOS調(diào)試之 crash log分析
iOS應(yīng)用崩潰日志分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 iOS崩潰是讓iOS開發(fā)人員比較頭痛的事情,app崩潰了,說明代碼寫的有問題,這時(shí)如何快速定位到崩潰的地方很...
    齊滇大圣閱讀 65,934評(píng)論 29 443
  • 前言 崩潰是讓發(fā)人員比較頭痛的事情,app崩潰了,說明代碼寫的有問題,這時(shí)如何快速定位到崩潰的地方很重要。調(diào)試階段...
    進(jìn)無盡閱讀 2,186評(píng)論 0 9
  • LLVM簡介 XCode4.0以后,LLVM是構(gòu)架編譯器(compiler)的框架系統(tǒng),以C++編寫而成,用于優(yōu)化...
    苦工閱讀 10,085評(píng)論 1 16
  • 如果大家是用真機(jī)在調(diào)試的過程中出現(xiàn)了Crash,那么請(qǐng)看iOS調(diào)試之 crash log分析 前言 導(dǎo)讀:Unde...
    KODIE閱讀 6,619評(píng)論 7 12
  • 小的時(shí)候,鄉(xiāng)下還都是黃色泥磚堆砌的房子,屋頂覆蓋著青灰色的瓦片,有時(shí)雨滴會(huì)穿過瓦片滴答滴答地落下,在地面上拍打出一...
    桃子醬呀閱讀 410評(píng)論 0 1

友情鏈接更多精彩內(nèi)容