作為開發人員,掌握開發環境下的調試技巧十分有必要。我們在編寫java程序的過程中,經常會遇到各種莫名其妙的問題,為了檢測程序是哪里出現問題,經常需要增加日志,看變量的值,這樣調試很麻煩。假設我每天花費1小時在調試我的應用程序上的話,那累積起來的話也是很大量的時間。由於這個原因,用這些時間來重視並了解所有使我們調試更方便的功能。那能為你省下一些時間,也將會使你的生活更安逸、輕松。
首先我們需要注意三個點:不要使用System.out.println作為調試工具\使用一個日志分析器來閱讀日志\啟用所有組件的詳細的日志記錄級別
一個關於調試的瘋狂聲明作為開頭。但它必須是要說的!嘗試切分一下你那復雜的邏輯成多個獨立的單元,並編寫單元測試來檢測你代碼的正確性。我想像如下這樣的流程應該是發生得非常頻繁的—-一些人通過大型web應用程序點擊、填寫多個表單、切換到不同的頁面、正在最后的頁面上檢測工個計算邏輯和實現這個調試視圖中的大部分邏輯。在啟動你的tomcat之前總是問你自己:有沒有方法使用一個單元測試來檢測這些行為?你在過去這些時間可以不知道或已忘記這些,但從現在開始,我們將要關注一些eclipse的調試技巧,你會發現有大量的關於良好代碼設計的好東西。
Debug模式的界面,共分為5個區域
(1)Debug(調試)區域,顯示當前正在調試代碼是什么,在第多少行
(2)Variables(變量)區域,顯示變量的值。
(3)代碼編輯區
(4)代碼結構區,顯示代碼中的各個方法。
(5)Console(控制台)區域。
一、條件斷點
我們通常調試斷點的時候一般就是點擊行號的左邊,這個時候就會有斷點被打起來。在debug視圖中,BreakPoint View將所有斷點都列出來,但是我們可以添加一個boolean類型的條件來決定斷點是否被跳過。如果條件為真,在斷點處程序將停止,否則斷點被跳過,程序繼續執行。如果你只對應用中的某部分感興趣的話,這個功能非常有用。例如,如果你要在第13次循環的時候檢查程序,或者在一個抽象父類中調試某些功能,而你只關注其中一個具體的實現。你可以在斷點視圖中設置條件,或者通過代碼旁邊的藍色斷點標記的右鍵菜單(”Breakpoint Properties”)設置。你可以在條件代碼片段為true的時候暫停程序,或者當代碼片段的值改變的時候掛起程序。
斷點屬性中有三個選擇,啟用“Enable”,Hit Count和Conditional中依據我們的需要來選擇。
1)Hit Count 是指定斷點處的代碼段運行多少次,最典型的就是循環,如果要讓一個循環執行10次就線程掛起,則指定Hit Count值為10,那么當前的循環執行到第九次的時候就會掛掉。
2)Conditional,顧名思義,就是條件判斷,例如我們需要循環變量i==10時,線程掛起,則條件設定為i==10,選擇Suspend when "true"。
那如果上面的Hit Count和Conditional都選擇的話,如果表達式和值設置不合理則會實效。如果選擇Suspend when value changes,那么可能在Conditional在變量值發生改變的時候就掛起。
二、變量視圖
1、變量名視圖,顯示當前代碼行中所有可以訪問的實例變量和局部變量2.顯示所有的變量值3.可以通過該窗口來改變變量值
如果你需要在變量視圖查看一個Map對象或者List對象的值,對於eclipse的默認設置,一般並不是那么容易。假設,你使用的是HashMap,你需要點擊遍歷各個實體條目,並面臨各種HashMap的實現細節。但是,在變量視圖上面有一個叫做“Show Logical Structure”的按鈕。它非常有用,尤其當你的對象的toString()方法所展示的信息並不友好的時候。
當你需要稍微更改輸入信息的時候,不需要重新開始調試會話,只需在一個表格中輸入新的信息,你可以在調試階段直接修改你的變量的值。有寫時候,你可以節省一些時間,你可以通過這個功能,更加簡單的模擬一些怪異的情況。
在選中的變量上使用Ctrl+Shift+d 或者 Ctrl+Shift+i可以查看變量值,另外我們還可以在Expressions View中添加監視。
三、Display視圖
你知道“Display視圖”嗎?你可以在調試過程中,通過“Window” -> “Show View” -> “Display”來激活它。現在,你的eclipse應該是一個空白的新視圖。你可以使用這個視圖,輸入或者演算一些新的代碼。這些代碼在當前的調試位置的上下文環境中被執行,這意味着,你可以使用所有變量甚至是內容助手。要執行你的代碼的話,只需標記它,並使用右鍵菜單或者CTRL+U(執行)或者 CTRL+SHIFT+I (檢查).
四、Drop to frame
Drop to frame就是說,可以重新跳到當前方法的開始處重新執行,並且所有上下文變量的值也回到那個時候。不一定是當前方法,可以點擊當前調用棧中的任何一個frame跳到那里(除了最開始的那個frame)。主要用途是所有變量狀態快速恢復到方法開始時候的樣子重新執行一遍,即可以一遍又一遍地在那個你關注的上下文中進行多次調試(結合改變變量值等其它功能),而不用重來一遍調試到哪里了。當然,原來執行過程中產生的副作用是不可逆的(比如你往數據庫中插入了一條記錄)。
五、Step 過濾
我們可以在Preferences中添加一個過濾器,排除指定的包。
六、進入、跳過、返回
其實這個技巧是debug最基本的知識。
F5-Step Into:移動到下一步,如果當前的行是一個方法調用,將進入這個方法的第一行。(可以通過第九條來排除)
F6-Step Over:移動到下一行。如果當前行有方法調用,這個方法將被執行完畢返回,然后到下一行。
F7-Step Return:繼續執行當前方法,當當前方法執行完畢的時候,控制將轉到當前方法被調用的行。
F8-移動到下一個斷點處。
總之,現在基本的調試方法基本上都分享了,什么,你還沒聽懂,那么請打開你的eclipse進行實際操作吧!不要一味了看博文而不去實踐,debug的使用源於生活也用了生活,再說一遍,現在來動手操作吧!
進入debug模式:
1、設置斷點
2、啟動servers端的debug模式
3、運行程序,在后台遇到斷點時,進入debug調試狀態