java debug

調試視圖:有條件的斷點

如果你僅僅對程序的某個部分感興趣,調試視圖是非常有幫助的。假設你想看看一個循環中的第十三次循環得到什麼結果,或者你正在調試一個抽象父類,想看看某個具體的子類。你可以在調試視圖設置條件,右鍵點擊代碼旁的藍色斷點符號,在彈出菜單中選擇“Breakpoint Properties…”。你可以選擇是在你的代碼段返回真值是停止程序或者當你的代碼段的值改變時停止。

變量視圖:顯示邏輯結構(Show Lodical Structure)

如果你想在變量視圖中查看Map或者List中的值,eclipse的默認設置可能不是那麼方便。譬如你在使用HashMap,你必須要點開所有的子節點才能看到HashMap中的內容,還要受到HashMap實現細節的干擾。但是在變量上有一個小按鈕-“Show Logical Structure”。它非常的方便,尤其當你沒有實現某個對象的toString()代碼時。我的老闆前幾個星期剛剛告訴我Eclipse有這個功能。你知道,他是那種每天只用對着PowerPoint和Excel的人。這對我這種號稱程序員的傢伙來說是件多麼丟臉的事情啊!;-)

變量視圖:更改值…(Change Value…)

假設你在一個基於Web的表單中稍微改了一點輸入值,那麼我們不需要重啓調試session,你可以直接使用變量視圖的改變變量值的功能。這可以節省你的時間,有時候也能幫你模擬一些奇怪的行爲。

顯示視圖(Display View)

你知道還有個“顯示視圖”嗎?你可以通過“Window” -> “Show View” -> “Display”激活這個視圖。現在你的Eclipse有一個完全空的視圖。你可以通過這個視圖來輸入以及驗證新的代碼段。這些代碼將會在當前的調試的位置的上下文中執行,這意味着你可以使用所有的變量,你甚至還能使用內容輔助。要執行這個代碼,你需要選中它,然後點擊右鍵彈出菜單點擊相應的項,或者按下CTRL+U(執行)或者按下CTRL+SHIFT+I(檢查)。

導航: Drop to Frame

我相信所有人都知道”Step Into”,“Step over”,甚至知道“Step return”。這是調試要掌握的最基本的技巧。我還想告訴你另外兩種方法。我非常喜歡它們。第一個是“Drop to Frame”。有了這個功能,你可以回到過去;-),你可以輕鬆回到你曾經運行過的Java stackframe中的位置。這對我來說非常有用,因爲可能我錯過了某一點,有了”Drop to Frame”功能,我可以輕鬆重新運行那段代碼了。

導航: Step into Selection

第二個是“Step into Selection”。這個功能非常簡單,但是很多人都沒有使用。你僅僅需要按下Ctrl+Alt,同時點擊你想去的方法上點擊,快捷方便。相比較“Step Into”,“Step into Selection”更加方便。譬如假設你想進入某個有許多參數的方法,你可以使用一步就跳過所有參數的賦值。”Run to line”也是個不錯的功能。你只需要將鼠標放在那一行前面,然後點擊”CTRL+R”。

導航:使用快捷鍵

如果你不再使用鼠標,你會變得更加有效率。至少你應該掌握以下的快捷鍵:

F5 – “Step Into”

F6 – “Step Over”

F7 – “Step Return”

F8 – “Resume”

Ctrl+Shift+B – “Toggle Breakpoint”

Ctrl+Shift+I – “Inspect”

斷點視圖:Watchpoints

是什麼改變了變量?!有時創建watchpoint會有很大的幫助。當某個要監視的field的值改變時或是讀到時,調試器會停下來。雙擊某個field,這個watchpoint顯示在斷點視圖中,你可以編輯它的屬性。你也可以設置hit count,意思是當你輸入的hit count已經達到了,調試器便會停下來。這個也適合於普通的斷點。

清晰易讀的對象

變量視圖是使用toString()方法來顯示一個對象的值,所以我們應該要寫出清晰易讀的toString()方法。java.lang.Object默認的toString()方法的javadoc也如此建議:

1
2
3
4
5
6
7
* Returns a string representation of the object. In general, the
* toString method returns a string that
* "textually represents" this object. The result should
* be a concise but informative representation that is easy for a
* person to read.
* It is recommended that all subclasses override this method.
[...]

你可以看一看commons-lang中的ToStringBuilder。它可以幫助你寫出“良好的、前後一致的”toString()方法。

如果你不能修改toString()方法,譬如你使用框架,或是外來的API,在Eclipse中創建“Detail Fomatter”可以幫到你。在變量視圖中右擊某個對象,然後點擊“New Detail Formatter…”。然後你便能夠定義代碼,之後這種類型的Object都用這種形式來顯示。


 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章