大家肯定都用過Eclipse的調試的功能,在調試的過程中自然也無法避免要使用斷點(breakpoint),但不知是否對Eclipse中各類斷點都有所瞭解。本篇圖文並茂地介紹了Eclipse中全部類型的斷點,及其設定,希望對大家有所協助。(2011.11.20)
1. 樣本程式
BreakpointDemo是一個臆造的應用程式,只是為了便於講解Eclipse中各類斷點的使用罷了。其代碼如所示,
BreakpointDemo主要包含兩個方法:
[1]setValue,該方法根據指定的次數(count),對成員變數value進行賦值,值的範圍為0-9的隨機整數。
[2]printValue,該方法會調用setValue()對value進行賦值,並列印出value的值;但,如果value能被3整除,那麼就會拋出IllegalArgumentException異常。
2. Line Breakpoint
Line Breakpoin是最簡單的Eclipse斷點,只要雙擊某行代碼對應的左側欄,就對該行設定上斷點。此處,對第20行代碼設定上Line Breakpoint,如所示,
可以為Line Breakpoint設定一個條件,那麼當程式運行到該斷點時,只有滿足設定的條件,才會被中斷。右鍵點擊第20行的斷點,選擇"Breakpoint Properties..."
在彈出的屬性對話方塊中,勾選上"Conditional",然後在文字框中輸入"count % 2 == 0"。
該條件表示,當程式運行到第20行時,只有當count為偶數時,程式才會被中斷。細心地話,你會發現該斷點的表徵圖發生了改變,多了一個問號。
3. Watchpoint
Line Breakpoint關注於程式啟動並執行"過程",大家也常把使用這種斷點的調試稱為單步調試。但有時候,我們對程式的運行過程不太瞭解,可能也不太關心,不能確定在什麼地方設定斷點比較合適,而可能比較關注某個關鍵變數的變化或使用。此時,就可以為該變數設定一種特殊的斷點--Watchpoint。在此樣本,我們最關心的就是成員變數value的值,那麼就可以為它設定一個Watchpoint,雙擊第9行代碼對應的左側欄就可以了。
使用在2中所提及的方法,查看該斷點的屬性,
預設地,當該變數被訪問或它的值被修改時,程式都會被中斷。但在本樣本中,只希望當對value的值進行修改時程式才需要被中斷,所以取消對"Access"的勾選。
這時,我們會發現原來的Watchpoin表徵圖也有變化了。
4. Method Breakpoint
與關注對某個變數的訪問與修改一樣,我們也可以關注程式對某個方法的調用情況,即,可以設定Method Breakpoint。在此處,設定針對方法setValue的Method Breakpoint。同理,雙擊第11行代碼對應的左側欄即可。
仍然要查看該斷點的屬性。預設地,只勾選了"Entry",而沒有勾選"Exit"。
這表示,當剛進入該方法(調用開始)時,程式會被中斷;而,離開該方法(調用結束)時,程式並不會被中斷。在本樣本中,需要同時勾選上"Exit"。
點擊OK之後,可以看到該斷點的表徵圖也有所改變。
根據這裡的設定,當程式運行到第20行後會在第12行被中斷,儘管這裡沒有顯式的斷點,但這就是setValue()方法的入口(Entry)。必須注意地是,程式在運行到第16行時不會被中斷,儘管它看起來像是setValue()方法的出口(Exit)。實際上,程式會在第17行被中斷,這裡才是setValue()調用結束的地方。
5. Exception Breakpoint
如果,我們期望某個特定異常發生時程式能夠被中斷,以方便查看當時程式所處的狀態。通過設定Exception Breakpoint就能達到這一目標。本樣本故意在第23行拋出了IllegalArgumentException異常,我們期望程式運行到此處時會被中斷。但我們不直接為此行代碼設定Line Breakpoint,而是為IllegalArgumentException設定Exception
Breakpoint。設定Exception Breakpoint的方法與其它類型斷點都不同,它不能通過雙擊左側欄的方式在代碼編輯器上直接進行設定。點擊Breakpoints視圖右上方形如Ji的表徵圖,
會彈出如下所示的對話方塊,
在其中選中IllegalArgumentException,並點擊OK,這時一個Exception Breakpoint就設定好了。
當value為3的倍數時,程式會在第23行被中斷,這時我們就能使用調試器來看看value具體是等於0,3或6。
6. Class Load Breakpoint
還有一種大家平時可能不太用的斷點--Class Load Breakpoint,即當某個類被載入時,通過該斷點可以中斷程式。
小結
上述的Eclipse斷點,我們在現實工作中肯定都有意或無意地使用過其中的幾種,只是不一定十分瞭解內情罷了。使用好Eclipse的各種斷點,可以把很好地協助我們剖析器,定位問題。
轉自:http://www.blogjava.net/jiangshachina/archive/2011/11/20/364367.html