Eclipse debug 調試的幾點技巧

來源:互聯網
上載者:User

標籤:des   http   io   os   使用   java   ar   strong   檔案   

在網上看到一篇關於Eclipse debug調試的文章,整理得比較全面,現轉載如下:

 

先提三點

  • 不要使用System.out.println作為調試工具
  • 啟用所有組件的詳細的日誌記錄層級
  • 使用一個日誌分析器來閱讀日誌

1、條件斷點

想象一下我們平時如何添加斷點,通常的做法是雙擊行號的左邊。在debug視圖 中,BreakPoint View將所有斷點都列出來,但是我們可以添加一個boolean類型的條件來決定斷點是否被跳過。如果條件為真,在斷點處程式將停止,否則斷點被跳過, 程式繼續執行。

 

2、異常斷點

在斷點view中有一個看起來像J!的按鈕,我們可以使用它添加一個基於異常的斷點,例如我們希望當NullPointerException拋出的時候程式暫停,我們可以這樣:

 

3、觀察點

這個特性我非常喜歡,他允許當一個選定的屬性被訪問或者被更改的時候程式執行暫停,並進行debug。最簡單的辦法是在類中聲明成員變數的語句行號左邊雙擊,就可以加入一個觀察點。

 

4、查看變數

在選中的變數上使用Ctrl+Shift+d 或者 Ctrl+Shift+i可以查看變數值,另外我們還可以在Expressions View中添加監視。

 

5、改變變數值

我們可以在Debug的時候改變其中變數的值。在Variables View中可以按所示操作。

   6、在Main方法中停止在Run/Debug設定中,我們可以按如所示的啟用這個特性。程式將會在main方法的第一行停住   7、環境變數我們可以很方便的在Edit Conriguration對話方塊中添加環境變數   8、Drop to frame這個功能非常酷,是我第二個非常喜歡的功能,Drop to frame就是說,可以重新跳到當前方法的開始處重新執行,並且所有上下文變數的值也回到那個時候。不一定是當前方法,可以點擊當前調用棧中的任何一個 frame跳到那裡(除了最開始的那個frame)。主要用途是所有變數狀態快速恢複到方法開始時候的樣子重新執行一遍,即可以一遍又一遍地在那個你關注 的上下文中進行多次調試(結合改變變數值等其它功能),而不用重來一遍調試到哪裡了。當然,原來執行過程中產生的副作用是無法復原的(比如你往資料庫中插入 了一條記錄)。   9、Step 過濾當我們在調試的時候摁F5將進入方法的內部,但這有個缺點有的時候可能會進入到一些庫的內部(例如JDK),可能並不是我們想要的,我們可以在Preferences中添加一個過濾器,排除指定的包。 

 

10、進入、跳過、返回

其實這個技巧是debug最基本的知識。
  • F5-Step Into:移動到下一步,如果當前的行是一個方法調用,將進入這個方法的第一行。(可以通過第九條來排除)
  • F6-Step Over:移動到下一行。如果當前行有方法調用,這個方法將被執行完畢返回,然後到下一行。
  • F7-Step Return:繼續執行當前方法,噹噹前方法執行完畢的時候,控制將轉到當前方法被調用的行。
  • F8-移動到下一個斷點處。
 Eclipse調試常用技巧1、 條件斷點

斷點大家都比較熟悉,在Eclipse Java 編輯區的行頭雙擊就會得到一個斷點,代碼會運行到此處時停止。

條件斷點,顧名思義就是一個有一定條件的斷點,只有滿足了使用者佈建的條件,代碼才會在運行到斷點處時停止。

在斷點處點擊滑鼠右鍵,選擇最後一個"Breakpoint Properties"

斷點的屬性介面及各個選項的意思如,

2、 變數斷點

斷點不僅能打在語句上,變數也可以接受斷點,

就是一個變數的打的斷點,在變數的值初始化,或是變數值改變時可以停止,當然變數斷點上也是可以加條件的,和上面的介紹的條件斷點的設定是一樣的。

3、 方法斷點

 

方法斷點就是將斷點打在方法的入口處,

方法斷點的特別之處在於它可以打在 JDK的源碼裡,由於 JDK 在編譯時間去掉了調試資訊,所以普通斷點是不能打到裡面的,但是方法斷點卻可以,可以通過這種方法查看方法的調用棧。

4、 改變變數值

代碼停在了斷點處,但是傳過來的值不正確,如何修改一下變數值保證代碼繼續走正確的流程,或是說有一個異常分支老是進不去,能不能調試時改一下條件,看一下異常分支代碼是否正確?

在Debug 視圖的 Variables 小視窗中,我們可以看到 mDestJarName 變數的值為 "F:\Study\eclipsepro\JarDir\jarHelp.jar "

我們可以在變數上右鍵,選擇"Change Value..." 在彈出的對話方塊中修改變數的值,

 

或是在下面的值查看視窗中修改,保用Ctr+S 儲存後,變數值就會變成修改後的新值了。

5、 重新調試

 

這種調試的回退不是萬能的,只能在當前線程的棧幀中回退,也就說最多隻能退回到當前線程的調用的開始處。

回退時,請在需要回退的線程方法上點右鍵,選擇 "Drop to Frame"

6、 遠端偵錯

用於調試不在本機上的程式,有兩種方式,

1、本機作為用戶端

2、本機作為服務端

使用遠端偵錯的前提是伺服器端和用戶端的代碼是一致的。

 

本機作為用戶端

本機作用戶端比較常用,需要在遠端的伺服器上的java程式在啟動時開啟遠端偵錯開關,

伺服器端需要加上虛擬機器參數

1.5以前版本(1.5以後也可用):【-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 】

1.5及以上版本:【 -agentlib:jdwp=transport=dt_socket,server=y,address=8000】

F:\Study\eclipsepro\screensnap>java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 -jar screensnap3.jar

串連時遠程伺服器時,需要在Eclipse中建立一個遠端偵錯程式

這裡有一個小地方需注意,串連上的時候貌似不能自動切換到Debug視圖,不要以為原生偵錯工具沒有串連到伺服器端。

 

本機作為服務端

同本機作為用戶端相比,只需要修改一下“Connection Type”

 

這時Eclipse會進入到等待串連的狀態

串連程式使用如下參數即可串連本機伺服器,IP地址請用實現IP替換~~

【-agentlib:jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:8000】

F:\Study\eclipsepro\screensnap>java -agentlib:jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:8000 -jar screensnap3.jar

 

遠端偵錯時本地的代碼修改可同步到遠程,但不會寫到遠端檔案裡,也就是說本地修改會在下次啟動遠程程式時就沒有了,不會影響到下次使用時的遠程代碼。

 

有關遠端偵錯更詳細點的介紹請參考【使用 Eclipse 遠端偵錯 Java 應用程式】

 

 

好像漏了一個斷點,異常斷點,補一下。

7、異常斷點

經常遇見一些異常,然後程式就退出來了,要找到異常發生的地方就比較難了,還好可以打一個異常斷點,

中我們增加了一個NullPointException的異常斷點,當異常發生時,代碼會停在異常發生處,定位問題時應該比較有協助。

        

Eclipse debug 調試的幾點技巧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.