iOS crash 崩溃问题的追踪方法
在調(diào)試程序的時(shí)候,總是碰到crash的bug,而且一追蹤就是一些匯編的代碼,讓人特別疑惑。
一般情況下可以通過(guò)增加兩天斷點(diǎn)來(lái)解決此問(wèn)題,方法介紹如下:
基本上有錯(cuò)誤分為以下幾種類(lèi)型:
signal(SIGABRT, MySignalHandler);
signal(SIGILL, MySignalHandler);
signal(SIGSEGV, MySignalHandler);
signal(SIGFPE, MySignalHandler);
signal(SIGBUS, MySignalHandler);
signal(SIGPIPE, MySignalHandler);
SIGABRT和EXC_BAD_ACCESS較為特殊,算是比較好跟進(jìn)。
SIGABRT是系統(tǒng)報(bào)錯(cuò),在memery warning之后,系統(tǒng)會(huì)把程序強(qiáng)制退出,報(bào)的就是這個(gè)錯(cuò)誤。
EXC_BAD_ACCESS 大多數(shù)時(shí)候是內(nèi)存提前釋放而引起的問(wèn)題,或者訪問(wèn)的方法不存在引起的。
?
追蹤程序的調(diào)用stacktrace的方法,跟蹤問(wèn)題:
一般出錯(cuò)了之后出現(xiàn)的常見(jiàn)界面,再熟悉不過(guò)了。。
?
切換到breakpoint界面,拖動(dòng)底端的slider按鈕,顯示調(diào)用堆棧
雖然調(diào)用堆棧已經(jīng)出來(lái)了,但是都是一堆的匯編代碼,無(wú)法給予明確的信息。。
剩下的就是今天要講的問(wèn)題:添加Symbol breakpoint ?Exception breakpoint
Exception breakpoint添加 的添加步驟
一、Exception breakpoint 的添加。
1、切換到breakpoint 視圖界面
2、點(diǎn)擊最底端的"+"按鈕,添加Add Exception BreakPoint,這個(gè)就是捕獲所有的exception, 貌似stackoverflow上說(shuō),bad_access那種錯(cuò)誤無(wú)法捕獲的,這個(gè)用于捕獲那些SIGSEGV 的錯(cuò)誤。
3、添加完成之后的界面。
?
二、Symbolic breakpoint的添加
前兩步和一 基本是一樣的,不截圖了,只是在第二步選擇的時(shí)候選 Add Symbolic BreakPoint?
第三步截圖;添加完成之后添加上objc_exception_throw
?
完成,添加完成只兩個(gè)斷點(diǎn)之后,程序中很多異常也可以捕獲了,直接定位到出問(wèn)題的位置。
當(dāng)然程序中最好也加上異常處理的代碼,可以參考這個(gè)處理,一般都是這個(gè)方式處理的
http://www.cocoachina.com/newbie/tutorial/2012/0829/4672.html
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的iOS crash 崩溃问题的追踪方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ADO.NET Entity Frame
- 下一篇: java 应用程序的打包发行