iOS常用調試方法:斷點調試
奇技指南
在iOS項目開發過程中,常用到靜態分析(Analyze)、斷點(BreakPoint)和控制臺(Console)進行代碼調試。本篇文章介紹Xcode常用調試方法之”斷點調試“。
一、簡介
Xcode的斷點功能是iOS開發者的常用功能。在代碼編輯區內的左邊欄上點擊一下即可創建一個斷點,當程序每次運行到斷點,就會暫停下來,方便開發者調試。如下圖:
同時,開發者可以使用上圖中用數字標記的工具輔助斷點調試。各工具的作用如下:
- 啟用/禁用斷點(點擊后變灰色,所有斷點失效;再點擊變藍色,所有斷點生效)
- 繼續執行程序(點擊后跳過本次斷點,繼續執行程序)
- 執行下一步(點擊后執行第37行代碼)
- 進入方法(點擊后進入-afunction方法)
- 跳出方法(在-afunction方法內部點擊后回到第36行代碼)
除了斷點的基礎用法,開發者還可以使用斷點的進階功能:編輯斷點、異常斷點和符號斷點。
二、編輯斷點
雙擊斷點或者右鍵點擊斷點,選擇Edit Breakpoint即可打開斷點編輯頁面。頁面中包含Condition、Ignore、Action和Options四個部分,接下來逐一介紹。
1、Condition
Condition為條件。開發者可以在Condition輸入框中設置觸發斷點的條件。比如,在一個for循環中,可以設置在滿足i==5時才觸發斷點。如下圖:
2、Ignore
Ignore為忽略次數。開發者可以在Igore輸入框中設置忽略此斷點的次數。比如,設置Ignore為5,則在第6次執行到斷點行時才會觸發斷點。
3、Action
Action為觸發動作。Action可以添加多條,在觸發斷點后,會緊接著執行設定的Actions。Action有6種執行類型,其中較常用的有Debugger Command和Log message,如下圖:
1) Debugger Command
Debugger Command允許開發者設定一些LLDB命令,從而實現打印對象、修改變量等功能。如下圖:
2) Log Message
Log Message為提供了標準的文本輸出格式。開發者可以按照格式設定在觸發斷點后輸出的內容。其中,@exp@表示輸出exp的內容,%B表示輸出斷點的名稱,%H表示輸出斷點執行的次數。如下圖:
4、Options
Options控制在執行斷點對應的Actions后是否自動繼續執行程序。勾選后Options后,斷點被觸發后不進入Debug界面。
三、異常斷點(全局斷點)
開發者可以在Xcode中很方便地創建一個異常斷點。如下圖:
當創建異常斷點后,會顯示一個名為All Exceptions的斷點,所以也常稱作全局斷點。當程序拋出異常時會觸發異常斷點,并且大部分常見錯誤會被斷點定位到對應的代碼行,很方便調試。比如:設置全局斷點后,我們寫一段數組越界的代碼,當運行到此代碼時,就會斷點到越界的那一行。如下圖:
而當去掉全局斷點后再次運行程序觸發越界代碼后會崩潰斷點到main.m中,而不會定位到越界那一行。如下圖:
四、符號斷點
符號斷點(Symbolic Breakpoint)是全局斷點,可以針對某一個方法(函數)設置斷點。開發者可以很方便地創建一個符號斷點,如下圖:
與普通斷點相比,符號斷點的編輯界面多出來Symbol和Module兩個輸入框。
1、Symbol
開發者可以在Symbol輸入框中設置斷點出發方法/函數。如下圖,在Symbol中設置一個方法/函數后,運行程序并執行到此方法時會觸發斷點。
這里要注意Symbol中方法/函數的寫法:
- 方法(OC方法):用+指明是類方法,用-指明是實例方法,參數聲明不可省略,:后不能有空格;
- 函數:(C函數):直接寫函數名即可。
2、Module
開發者可以在Module輸入框中設置Symbol中的函數所在的庫,以避免不同庫中存在名字相同的方法/函數,默認不用填寫。
3、Condition等功能
符號斷點編輯頁面除Symbol和Module外的Condition等功能用法與普通斷點一致。比如,在Condition輸入框中設置$arg3==nil && $arg4==nil,就會限制斷點在滿足***個參數和第二個參數都為nil時才會被觸發。如下圖:
總 結
Xcode的斷點調試功能非常強大,開發者充分利用斷點調試,再結合上豐富的LLDB調試命令,會在很多程度上提高開發效率。
【本文是51CTO專欄機構360技術的原創文章,微信公眾號“360技術( id: qihoo_tech)”】