Eclipse除錯(2)——各種型別斷點設定
本文是 Eclipse除錯(1)——基礎篇 的提高篇。分兩個部分:
1) Debug檢視下的3個小視窗檢視:變數檢視、斷點檢視和表示式檢視
2) 設定各種型別的斷點
變數檢視、斷點檢視和表示式檢視
1. variable:
變數檢視顯示debug過程中程式中出現的所有的變數以及其值。我們也可以通過該檢視手動設定變數的value。手動設定變數值的作用在於,當debug到該變數處時,沒有得到我們預期的值,為了能讓我們的debug按照預期的方式繼續走下去(如變數滿足一定條件才能走到某一個特定的分支中去),我們可以設定變數值為預期的值,達到測試目的。
2. Breakpoints:
斷點檢視顯示程式中的所有斷點。我們可以通過這個檢視設定斷點的型別,結束通話條件等。還可以選擇skip哪些斷點以及刪除斷點。本文之後的部分將對斷點的設定做更詳細的講解。
3. Expressions:
表示式檢視可以增加一些自己感興趣的表示式,觀察其值。也可以選中表達式,使用“Ctrl + Shift +i”快捷鍵在debug程式碼中檢視其值,或者右鍵–>Inspect。
斷點設定
1. 普通行斷點
在程式碼的某一行最左側雙擊就設定了一個普通行斷點。程式debug執行到該行就會在此斷點處暫停。刪除該斷點可以再次雙擊,也可以在斷點檢視中刪除。在斷點檢視中也可以設定是否跳過斷點。
2. 行斷點-條件斷點(Hit Count Conditional)
條件斷點有兩種:Hit Count和Conditional。設定方法為:①可以在斷點檢視中選定某個斷點,然後在檢視下方設定;②也可以選中某個斷點後右擊–>Breakpoint Properties…中設定。
Hit Count斷點適用於測試迴圈時,在迴圈到第N次此斷點處時,程式停止。Hit Count斷點只會停止一次。
Conditional斷點是設定一個條件表示式,設定當該條件表示式為true或者條件表示式的值改變時程式停止。Conditional斷點只要條件滿足就會停止。
3. 異常斷點
異常斷點可以通過Breakpoints檢視的Add Java Exception Breakpoint按鈕新增,在方法丟擲指定的異常的時候會觸發中斷。可選項包括Caught locations、Uncaught locations、Subclass of this exception分別對應在程式碼中捕獲了該異常時、未捕獲該異常時、丟擲的異常為當前Exception的子類時觸發中斷。
需要注意的是Eclipse預設會在丟擲未捕獲異常時自動中斷,所以取消Uncaught locations時看起來沒有任何效果,丟擲的異常仍然會觸發中斷。可以通過window–>preferences–>java–>debug取消Suspend execution on uncaught exceptions選項來使Uncaught locations生效。但不建議這樣做。
4. 方法斷點
方法斷點打在方法宣告的第一行處。預設情況下在進入該方法時執行緒中斷,可以選擇Entry或Exit選擇在方法進入或方法退出時中斷。
5. 監視斷點(watchpoint)
監視斷點是設定在類的例項變數或者靜態變數上的。斷點的條件有Access、Modification、Hit count。其中,Access和Modification必須至少選擇一個。Hit count是可選的。當選擇Access或Modification時,每次變數被訪問或者變數都修改,在被訪問或修改處都會中斷。如果還選擇了Hit count,則會在變數被訪問或者修改的第N次中斷一次。
單步過濾
單步過濾的場景是我們在使用F5來跟到某個方法內部的時候,經常會跟到一些我們確定不需要看的方法內部。
this.getTradeDetail(uid, itemStr.subString(0,5))
比如這行程式碼,想F5進入getTradeDetail內部,會首先執行itemStr.subString方法,會先進入subString方法,而這方法是jdk的String方法,確定沒問題,不需要關心,單步過濾就是跳過這些我們想忽略的方法直接到目標方法內部的一種debug技巧。
在Window > PreferencesJava > Debug > Step Filtering 設定過濾器, 可以選擇需要過濾掉的包和類。同時要確保你在debug檢視中啟用了單步過濾,如下圖。這樣在使用單步除錯的時候,就會使用到這個過濾功能。
上圖是過濾器配置,典型的就是把jdk的一些類和包配置過濾。下圖是要在debug時候開啟單步過濾,否則不生效。
顯示邏輯結構
顯示邏輯結構按鈕可以讓變數以更好的邏輯結構展示出來,提高可讀性。如下圖所示: