你應該看過一些如《關於調試的N件事》這類很流行的帖子 假設我每天花費小時在調試我的應用程序上的話那累積起來的話也是很大量的時間由於這個原因用這些時間來重視並了解所有使我們調試更方便的功能那能為你省下一些時間也將會使你的生活更安逸輕松同時也表明其它關於此主題的帖子也是很有價值的
不要調試太多
一個關於調試的瘋狂聲明作為開頭但它必須是要說的!嘗試切分一下你那復雜的邏輯成多個獨立的單元並編寫單元測試來檢測你代碼的正確性我想像如下這樣的流程應該是發生得非常頻繁的一些人通過大型web應用程序點擊填寫多個表單切換到不同的頁面正在最後的頁面上檢測工個計算邏輯和實現這個調試視圖中的大部分邏輯在啟動你的tomcat之前總是問你自己有沒有方法使用一個單元測試來檢測這些行為?你在過去這些時間可以不知道或已忘記這些但從現在開始我們將要關注一些eclipse的調試技巧你會發現有大量的關於良好代碼設計的好東西
斷點視圖 條件斷點
如果你只對應用中的某部分感興趣的話這個功能非常有用例如如果你要在第次循環的時候檢查程序或者在一個抽象父類中調試某些功能而你只關注其中一個具體的實現你可以在斷點視圖中設置條件或者通過代碼旁邊的藍色斷點標記的右鍵菜單(Breakpoint Properties)設置你可以在條件代碼片段為true的時候暫停程序或者當代碼片段的值改變的時候掛起程序
變量視圖展示邏輯結構
如果你需要在變量視圖查看一個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 (檢查)
導航Drop to Frame
我想任何人都知道Step Into Step over而且可能也知道Step return 這些是調試時的基本導航功能我想提兩個我非常喜歡的導航的高級方法第一個是Drop to Frame 使用這個特性你可以及時回退 你可以直接回退到運行過的java堆棧幀中某一幀當我調試時一不小心錯過了某個關注的代碼行時我常常用這個回退一幀使用Drop to Frame這個特性我可以簡單的重新運行某幀代碼
導航Step into Selection
第二個是Step into Selection 這也是很簡單但很多人使用的一個要使用它你只需要按 Ctrl+Alt 同時點擊一個你想運行到的方法名非常方便非常快速相比Step Into這個非常方便想想你像跟蹤進一個有很多參數的函數如果用Step Into你必須進入退出每個參數計算過程才能進入到你真正想進的函數Run to line也是很棒的特性只需要把光標放在你想運行到的哪一行前面然後按CTRL+R就可以了
導航器使用鍵盤
如果避免使用鼠標的話你的操作速度會更快你至少應該如下的快捷鍵
F – 單步進入
F – 單步執行並跳過
F – 單步執行並返回
F – 繼續執行
Ctrl+Shift+B – 添加斷點
Ctrl+Shift+I – 檢查
斷點視圖Watchpoints
如果改變這個變量會有什麼結果?! 有時候創建一個watchpoint對於調試會非常有用調試器會停止不管這個被觀察的字段是被修改還是被讀取 你可以自己來配置決定你只需雙擊一個字段然後你就可以在斷點視圖中看到watchpoint並且可以編輯它的屬性你甚至可以一個訪問次數這意味著當變量被訪問的次數達到這個數量的時候調試器會停止這對於普通的斷點也適用
友好的可讀的對象
變量視圖是使用對象的toString方法來現實對應的值因為這個原因如果提供友好的toString方法實現對調試來說會非常有用在javadoc中關於javalangObject的默認toString實現也是這樣推薦的
返回一個表示該對象的字符串通常<code>toString</code>方法返回這麼一個字符串字面表示該對象返回結果必須是一個簡潔卻富含可表示該對象的信息並且友好可讀取我們推薦所有的子類都覆蓋這個方法
你可以參考commonslang中的 ToStringBuilder它提供一些功能來編寫 (引用自javadoc ) 良好並連貫 的toString方法
默認的ToString
默認的ToStringBuilder例子
ToStringBuilder例子 – 多行文本風格
如果你不能修改toString實現例如你現在使用框架或者一個外部的API你可以有另外一個選擇在Eclipse中創建一個Detail Formatter你需要在變量視圖中右擊一個對象並點擊New Detail Formatter…然後你就可以輸入一些代碼用於展現這個對象
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28450.html