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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM