Eclipse的調試功能的10個小竅門


 

本文由 ImportNew - 唐小娟 翻譯自 Codecentric。如需轉載本文,請先參見文章末尾處的轉載要求。

你可以已經看過一些類似“關於調試的N件事”的文章了。但我想我每天大概在調試上會花掉1個小時,這是非常多的時間了。所以非常值得我們來了解一些用得到的功能,可以幫我們節約很多時間。所以在這個主題上值得我再來寫一篇文章。

第一條: 不要過分的調試!

有關調試的第一條要牢記的便是這條很瘋狂的口號!但是我必須要在這里再說一遍:不要過分的調試!試着將復雜的邏輯分解成獨立的小單元,然后寫單元測試代碼來保證小單元的正確運行。我經常看到某些人會這么做:在一個大型的Web應用上點擊,填了幾個表單,跳轉了多個頁面,只是為了確認最后一個頁面的結果的正確性,最后在調試視圖下來開發代碼。

在你開啟tomcat之前,應該要先問問自己:有沒有什么方法可以用單元測試來檢測代碼的行為呢?你可以找到很多教你如何寫出好的代碼的教程。而這里我主要來談一談Eclipse的調試功能,你可能不知道,或者長時間以來有些淡忘的功能。

調試視圖:有條件的斷點

如果你僅僅對程序的某個部分感興趣,調試視圖是非常有幫助的。假設你想看看一個循環中的第十三次循環得到什么結果,或者你正在調試一個抽象父類,想看看某個具體的子類。你可以在調試視圖設置條件,右鍵點擊代碼旁的藍色斷點符號,在彈出菜單中選擇“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也如此建議:

* 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都用這種形式來顯示。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM