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

你可能已經看過一些相似「關於調試的N件事」的文章了。但我想我天天大概在調試上會花掉1個小時,這是很是多的時間了。因此很是值得咱們來了解一些用獲得的功能,能夠幫咱們節約不少時間。因此在這個主題上值得我再來寫一篇文章。html

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

有關調試的第一條要牢記的即是這條很瘋狂的口號!可是我必需要在這裏再說一遍:不要過度的調試!試着將複雜的邏輯分解成獨立的小單元,而後寫單元測試代碼來保證小單元的正確運行。我常常看到某些人會這麼作:在一個大型的Web應用上點擊,填了幾個表單,跳轉了多個頁面,只是爲了確認最後一個頁面的結果的正確性,最後在調試視圖下來開發代碼。java

在你開啓tomcat以前,應該要先問問本身:有沒有什麼方法能夠用單元測試來檢測代碼的行爲呢?你能夠找到不少教你如何寫出好的代碼的教程。而這裏我主要來談一談Eclipse的調試功能,你可能不知道,或者長時間以來有些淡忘的功能。git

調試視圖:有條件的斷點

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

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

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

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

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

顯示視圖(Display View)

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

導航: Drop to Frame

我相信全部人都知道」Step Into」,「Step over」,甚至知道「Step return」。這是調試要掌握的最基本的技巧。我還想告訴你另外兩種方法。我很是喜歡它們。第一個是「Drop to Frame」。有了這個功能,你能夠回到過去;-),你能夠輕鬆回到你曾經運行過的Java stackframe中的位置。這對我來講很是有用,由於可能我錯過了某一點,有了」Drop to Frame」功能,我能夠輕鬆從新運行那段代碼了。tomcat

導航: Step into Selection

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

導航:使用快捷鍵

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

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

相關文章
相關標籤/搜索