英文原文:Again! – 10 Tips on Java Debugging with Eclipse html
參與翻譯(3人):enixyu, zhouao, ljb_iss
java
你應該看過一些如《關於調試的N件事》這類很流行的帖子 。假設我天天花費1小時在調試個人應用程序上的話,那累積起來的話也是很大量的時間。因爲這個緣由,用這些時間來重視並瞭解全部使咱們調試更方便的功能。那能爲你省下一些時間,也將會使你的生活更安逸、輕鬆。同時也代表其它關於此主題的帖子也是頗有價值的。 web
第1條:不要調試太多 apache
一個關於調試的瘋狂聲明做爲開頭。但它必須是要說的!嘗試切分一下你那複雜的邏輯成多個獨立的單元,並編寫單元測試來檢測你代碼的正確性。我想像以下這樣的流程應該是發生得很是頻繁的----一些人經過大型web應用程序點擊、填寫多個表單、切換到不一樣的頁面、正在最後的頁面上檢測工個計算邏輯和實現這個調試視圖中的大部分邏輯。在啓動你的tomcat以前老是問你本身:有沒有方法使用一個單元測試來檢測這些行爲?你在過去這些時間能夠不知道或已忘記這些,但從如今開始,咱們將要關注一些eclipse的調試技巧,你會發現有大量的關於良好代碼設計的好東西。 api
- 斷點視圖 : 條件斷點 tomcat
若是你只對應用中的某部分感興趣的話,這個功能很是有用。例如,若是你要在第13次循環的時候檢查程序,或者在一個抽象父類中調試某些功能,而你只關注其中一個具體的實現。你能夠在斷點視圖中設置條件,或者經過代碼旁邊的藍色斷點標記的右鍵菜單("Breakpoint Properties")設置。你能夠在條件代碼片斷爲true的時候暫停程序,或者當代碼片斷的值改變的時候掛起程序。 框架
- 變量視圖:展現邏輯結構 eclipse
若是你須要在變量視圖查看一個Map對象或者List對象的值,對於eclipse的默認設置,通常並非那麼容易。假設,你使用的是HashMap,你須要點擊遍歷各個實體條目,並面臨各類HashMap的實現細節。可是,在變量視圖上面有一個叫作「Show Logical Structure」的按鈕。它很是有用,尤爲當你的對象的toString()方法所展現的信息並不友好的時候。個人老大在幾周前爲我展現了這個功能。你知道,他常常跟PowerPoint或者Excel打交道。對於我這麼一個開發人員,多丟臉哦 函數
未開啓「Show Logical Structure」
開啓「Show Logical Structure」
單元測試
- 變量視圖:更改變量值...
當你須要稍微更改輸入信息的時候,不須要從新開始調試會話,只需在一個表格中輸入新的信息,你能夠在調試階段直接修改你的變量的值。有寫時候,你能夠節省一些時間,你能夠經過這個功能,更加簡單的模擬一些怪異的狀況。
- Display視圖
你知道「Display視圖」嗎?你能夠在調試過程當中,經過「Window」 -> 「Show View」 -> 「Display」來激活它。如今,你的eclipse應該是一個空白的新視圖。你可使用這個視圖,輸入或者演算一些新的代碼。這些代碼在當前的調試位置的上下文環境中被執行,這意味着,你可使用全部變量甚至是內容助手。要執行你的代碼的話,只需標記它,並使用右鍵菜單或者CTRL+U(執行)或者 CTRL+SHIFT+I (檢查).
我想任何人都知道「Step Into」, 「Step over」,並且可能也知道「Step return」. 這些是調試時的基本導航功能。我想提兩個我很是喜歡的導航的高級方法。第一個是「Drop to Frame」. 使用這個特性你能夠及時回退 你能夠直接回退到運行過的java堆棧幀中某一幀。當我調試時,一不當心錯過了某個關注的代碼行時,我經常用這個回退一幀。使用「Drop to Frame」這個特性我能夠簡單的從新運行某幀代碼。
第二個是「Step into Selection」. 這也是很簡單,但不少人使用的一個。要使用它,你只須要按 Ctrl+Alt 同時點擊一個你想運行到的方法名。很是方便,很是快速。相比「Step Into」這個很是方便,想一想你像跟蹤進一個有不少參數的函數,若是用「Step Into」你必須進入,退出每一個參數計算過程,才能進入到你真正想進的函數。「Run to line」也是很棒的特性。只須要把光標放在你想運行到的哪一行前面,而後按「CTRL+R」就能夠了。
- 導航器:使用鍵盤
若是避免使用鼠標的話,你的操做速度會更快。你至少應該以下的快捷鍵:
- 斷點視圖:Watchpoints
若是改變這個變量會有什麼結果?! 有時候建立一個watchpoint對於調試會很是有用。調試器會中止,無論這個被觀察的字段是被修改仍是被讀取 - 你能夠本身來配置決定。你只需雙擊一個字段,而後你就能夠在斷點視圖中看到watchpoint,而且能夠編輯它的屬性。你甚至能夠一個訪問次數,這意味着當變量被訪問的次數達到這個數量的時候,調試器會中止。這對於普通的斷點也適用。
- 友好的可讀的對象
變量視圖是使用對象的toString方法來現實對應的值。由於這個緣由,若是提供友好的toString方法實現,對調試來講會很是有用。在javadoc中關於java.lang.Object的默認toString實現,也是這樣推薦的:
返回一個表示該對象的字符串。一般<code>toString</code>方法返回這麼一個字符串,「字面表示」該對象。返回結果必須是一個簡潔卻富含可表示該對象的信息,而且友好可讀取。咱們推薦全部的子類都覆蓋這個方法。
你能夠參考commons-lang中的 ToStringBuilder。它提供一些功能來編寫 (引用自javadoc ) "良好並連貫」 的toString方法。
默認的ToString
默認的ToStringBuilder例子
ToStringBuilder例子 – 多行文本風格
若是你不能修改toString實現,例如你如今使用框架或者一個外部的API,你能夠有另一個選擇,在Eclipse中建立一個「Detail Formatter」。你須要在變量視圖中右擊一個對象,並點擊「New Detail Formatter…」。而後你就能夠輸入一些代碼,用於展示這個對象。