1. 程式人生 > >Eclipse的除錯功能的10個小竅門

Eclipse的除錯功能的10個小竅門

一個偶能的機會  發現了這篇美文, 對於經常需要debug的我來說 收穫很大, 現在轉載過來 供大家分享  

中文原文地址: http://www.importnew.com/6164.html

英文原文地址: https://blog.codecentric.de/en/2013/04/again-10-tips-on-java-debugging-with-eclipse/

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

第一條: 不要過分的除錯!

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

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

除錯檢視:有條件的斷點

如果你僅僅對程式的某個部分感興趣,除錯檢視是非常有幫助的。假設你想看看一個迴圈中的第十三次迴圈得到什麼結果,或者你正在除錯一個抽象父類,想看看某個具體的子類。你可以在除錯檢視設定條件,右鍵點選程式碼旁的藍色斷點符號,在彈出選單中選擇“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都用這種形式來顯示。