1.Enable NSZombie Objects(開啓殭屍對象)
Enable NSZombie Objects可能是整個Xcode開發環境中最有用的調試技巧。這個技巧非常非常容易追蹤到重複釋放的問題。該技巧會以非常簡潔的方式打印指出重複釋放的類和該類的內存地址。
怎麼開啓殭屍對象呢?首先打開“Edit Scheme”(或者通過熱鍵?<),然後選擇Diagnostics選項卡,勾選Enable NSZombie Objects選項。
現在我們可以關掉ARC來測試重複釋放的問題、異常和更容易產生的Crashs,但是即使開啓ARC,重複釋放和與內存相關的Crashs也經常發生。現在假設我們犯了一些錯誤導致了重複釋放的發生來觀察將要發生什麼。
UIView* view = [[[UIView alloc] init] autorelease]; //... //do something with view...clearly forgetting that it has been autoreleased. // [view release];
現在運行這段代碼會發生重複釋放的問題,程序將崩潰在主函數,會像下面這樣:
Enable NSZombie Objects會讓調試器看起來像這樣:
這個例子看起來作用非常小,但是對於一個大工程通過Enable NSZombie Objects打印的信息是非常有用的。
2.對於所有異常添加Global BreakPoint(全局斷點)
當你的應用異常或者崩潰的時候Xcode喜歡做的一件事情是直接跳到主函數,就像第一個調試技巧中用到的那個例子一樣。如果異常或者崩潰能夠停留在異常或者崩潰發生的地方那該是多好呀。幸運的是有一個方法可以做到。Xcode有一個漂亮的功能叫做異常斷點,允許我們在異常發生的時候在異常發生的地方放一個斷點。你可以指定具體的異常也可以指定所有的異常。
怎樣開啓異常斷點呢?工程切換到異常瀏覽窗口,點擊下方左側的“Add Breakpoint”按鈕,然後選擇“Add Exception Breakpoint”確保可以捕獲所有異常。
現在異常發生時調試器不會直接跳轉到主函數了,而是停留在了異常發生的地方。
這個斷點給了我們一個調試異常非常好的開始的點,不用我們再去遍歷代買去找異常發生的地方了。
3.Static Analyzer(靜態分析)
Static Analyzer是一個非常好的工具去發現編譯器警告不會提示的問題和一些個人的內錯泄露和死存儲(不會用到的賦了值的變量)錯誤。這個方法可能大大的提高內存使用和性能,以及提升應用的整體穩定性和代碼質量。
怎麼打開Static Analyzer?打開Xcide的“Product”菜單,選擇Analyzer選項(或者使用熱鍵? shift B)。正像你看到的下面的截圖,Static Analyzer會捕獲任何應用內的可能的問題然後以藍色的警告展示出來。
我們也可以設置我們的應用在我們編譯應用的時候自動開啓Static Analyzer,打開項目project文件,設置“Run Static Analyzer”爲YES,如下圖:
4.Condational Breakpoints(條件斷點)
最後一個調試技巧條件斷點,這只是普通的斷點,當變量滿足一定條件時程序停止。這個調試技巧在當你想要捕獲一個循環中的變量的特定值或者一些不常發生的情況時是非常有用的,而不用你每次迭代都停止來查看。
怎樣開啓條件變量?只不過是添加一個普通斷點,然後右鍵點擊斷點選擇“Edit Breakpoint”,這時就打開了一個斷點編輯器,你可以在這裏設置斷點條件(以及一些其他的斷點設置),然後選擇“Done”,這個調試技巧非常簡單吧。
5.unrecognized selector send to instancd 快速定位
在Debug菜單中Breakpoints->Create Symbolic Breakpoint
在Symbolic中填寫如下方法簽名
-[NSObject(NSObject) doesNotRecognizeSelector:]
設置完成後再遇到類似的錯誤就會定位到具體的代碼。
原文連接:http://crushbeercrushcode.org/2012/11/four-tips-for-debugging-in-xcode-like-a-bro/