前記:編寫代碼過程中,出現錯誤、異常是不可避免的,這個時候,就體現了調試的重要性,下面就總結一下,平常我自己使用的一些調試技巧,以及匯總網路上其他網友使用的技巧。(ps以後有新的調試技巧,我也會一併更新)
1、使用殭屍變數(NSZombieEnabled)
具體使用及設定,可參考我的另一篇博文:http://blog.csdn.net/yhawaii/article/details/77895942、重寫object的respondsToSelector方法
在iphone開發的時候EXC_BAD_ACCESS這個bug時不容易找到原因的。
首先說一下EXC_BAD_ACCESS 這個錯誤,可以這麼說,90%的錯誤來源在於對一個已經釋放的對象進行release操作,或者操作一個在迴圈代碼中被修改的序列中的對象。雖然使用NSZombieEnabled變數可以協助你找到問題所在,但有的時候,即使通過設定NSZombieEnabled變數,還是不能定位到問題所在,這個時候,你可以試試重寫object的respondsToSelector方法,顯示出現EXEC_BAD_ACCESS前訪問的最後一個object,下面是具體的步驟:
a、在每個類並且在 other c flags中加入-D _FOR_DEBUG_(記住請只在Debug Configuration下加入此標記)。這樣當你程式崩潰時,Xcode的console上就會準確地記錄了最後啟動並執行object的方法。的實現檔案(.m,.mm)檔案中,添加如下代碼:
-(BOOL) respondsToSelector : (SEL)aSelector { printf("SELECTOR: %s\n", [NSStringFromSelector(aSelector) UTF8String]); return [super respondsToSelector:aSelector]; }
b、並且在 other c flags中加入-D _FOR_DEBUG_(記住請只在Debug Configuration下加入此標記)。這樣當你程式崩潰時,Xcode的console上就會準確地記錄了最後啟動並執行object的方法。
3、讓XCode反饋足夠多的資訊
在Edit–>Scheme裡面 找到Arguments ,在Environment Variables這裡添加
把下面2個值設定成YES
NSAutoreleaseFreedObjectCheckEnabled
NSDebugEnabled
這種方法非常好用,建議在建立一個工程的時候,加入此設定
4、設定全域異常斷點
在程式拋出異常時候,往往需要定位到異常
鍵入快速鍵 cmd + 6 進入斷點視窗,點擊左下角的"+"按鈕,選擇彈出框的“Add Exception BreakPoint”項,如所示:
然後使用預設設定,點擊"done"按鈕,設定全域異常斷點就完成了