IOS的Crash

在調試程序的時候,總是碰到crash的bug,而且一追蹤就是一些彙編的代碼,讓人特別疑惑。

一般情況下可以通過增加兩天斷點來解決此問題,方法介紹如下:

基本上有錯誤分爲以下幾種類型:

signal(SIGABRT, MySignalHandler);

signal(SIGILL, MySignalHandler);

signal(SIGSEGV, MySignalHandler);

signal(SIGFPE, MySignalHandler);

signal(SIGBUS, MySignalHandler);

signal(SIGPIPE, MySignalHandler);

SIGABRT和EXC_BAD_ACCESS較爲特殊,算是比較好跟進。

SIGABRT是系統報錯,在memery warning之後,系統會把程序強制退出,報的就是這個錯誤。

EXC_BAD_ACCESS 大多數時候是內存提前釋放而引起的問題,或者訪問的方法不存在引起的。

 

追蹤程序的調用stacktrace的方法,跟蹤問題:

一般出錯了之後出現的常見界面,再熟悉不過了。。

 

切換到breakpoint界面,拖動底端的slider按鈕,顯示調用堆棧

雖然調用堆棧已經出來了,但是都是一堆的彙編代碼,無法給予明確的信息。。

剩下的就是今天要講的問題:添加Symbol breakpoint  Exception breakpoint

Exception breakpoint添加 的添加步驟

一、Exception breakpoint 的添加。

1、切換到breakpoint 視圖界面

2、點擊最底端的"+"按鈕,添加Add Exception BreakPoint,這個就是捕獲所有的exception, 貌似stackoverflow上說,bad_access那種錯誤無法捕獲的,這個用於捕獲那些SIGSEGV 的錯誤。

3、添加完成之後的界面。

 

二、Symbolic breakpoint的添加

前兩步和一 基本是一樣的,不截圖了,只是在第二步選擇的時候選 Add Symbolic BreakPoint 

第三步截圖;添加完成之後添加上objc_exception_throw

 

完成,添加完成只兩個斷點之後,程序中很多異常也可以捕獲了,直接定位到出問題的位置。

當然程序中最好也加上異常處理的代碼,可以參考這個處理,一般都是這個方式處理的

http://www.cocoachina.com/newbie/tutorial/2012/0829/4672.html

 

發佈了63 篇原創文章 · 獲贊 1 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章