Xcode調試技巧

文中相關的調度技巧均在Xcode4.5+環境中完成。app

初學者調試技巧推薦聯接:函數

http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1lua

http://www.raywenderlich.com/10505/my-app-crashed-now-what-part-2spa

 

這篇文章給你們帶來的是一些Xcode實用技巧,好比:3d

• 擺脫NSlog打印輸出,使用斷點日誌。調試

• 擺脫TODOs註釋來進行編譯警告。日誌

• 使用條件表達式來進行斷點。code

• 使用LLDB動態修改數據。blog

• 等等。
get

 

• 設置調試控制檯

能夠經過cmd+shift+Y組合鍵或按以下方式調出控制檯

能夠根據習慣,在Xcode\Preferences設置控制檯輸出環境,通常設置爲控制檯+變量視圖顯示。

  

• 添加異常斷點

經過cmd+6或以下方式進入斷點導航欄。

點擊+添加異常斷點

下面是斷點編輯界面,異常斷點的類型有Object C和C++2種,通常狀況下選擇All,當你的代碼中有C++代碼時,若是你只是定位Object C代碼問題,建議選擇Object C,若是你選擇All,在調度過程當中可能會在不少C++的代碼處停住,但相關代碼其實並無錯誤(筆者如今的項目中碰到了此類問題)。

斷點行爲(Action),這個提供了很是強大的功能,可以在拋出異常的時候,執行Apple腳本,Debugger命令,log打印,執行Shell腳本,還能夠播放聲音等等。

Automatically continue after evaluating選項可使項目運行到斷點時,不進入暫停狀態,經常使用於斷點打印信息(後面會講到)。

 

通常使用異常斷點,是爲了定位拋出異常的代碼位置,幫助快速解決Bug

PS:能夠在LLDB中輸入bt命令,控制檯會列出相關的函數棧Crash信息(LLDB相關使用方法,後面會講到)。

 

• 運行時修改變量的值 

相關LLDB命令:

在下面例子中,斷點處,在LLDB中利用expr命令修改相關變量的值。
(關於expr命令須要說明的是須要知道明確的返回類型,即便返回類型爲void,例如expr (void)NSLog(@"test"))

下面咱們用斷點來完成相同的功能。先編輯斷點(或cmd+option,點擊斷點),執行相關Debugger命令。

執行輸出結果以下,用斷點,完成了相同的功能,變量值在運行是被改變了。

 

• 觸發條件斷點

這是一個頗有用的技巧,能夠檢測程序是束運行在正確的軌道上,條件生效時,進入調度模式,使用方式相似於斷言語句(Assert) 。

程序運行,進入斷點並執行Action。

ps:使用條件斷點時,Automatically continue after evaluating複選框不要勾上,不然斷點永遠不會生效。

 

• 符號斷點

也是一個很是有用的調試技巧,程序會在遇到特殊符號時進入調試模式,符號能夠是一個方法名、類中的一個方法、或者任意C方法(objc_msgSend)。

PS:一般用於觀察你須要關注的方法,好比:-[NSException raise],malloc_error_break,-[NSObject doesNotRecognizeSelector:]等,能夠快速幫你定義EXC_BAD_ACCESS等異常問題。

應用啓動後,進入調試模式,並執行Action。

 

• 一些註釋符號的使用

一、#warning add warning info,使用warning後,編譯會產生警告,加在臨時修改代碼的地方,能夠有效的防止錯誤提交代碼等,特別是發佈版本的時候,保證無任何編譯警告,能夠有效的下降風險。

二、#error add error warning info,error的使用更加嚴格,會讓你的代碼不能經過編譯,適合忽略編譯警告的人使用。

三、// TODO:這裏尚未寫完 優先級:1,TODO不會有編譯問題,它會顯示在跳轉欄裏(是否是很醒目),這個能夠用來保留任務列表和評論,很實用。

相關文章
相關標籤/搜索