Eclipse調試技巧:遠程調試,條件斷點和異常斷點

轉載請註明出處

作者:曉渡
文章地址:https://greatestrabit.github.io/2016/06/23/debug/

對於使用Eclipse進行日常編程工作的工程師來說,調試是每天都在進行的工作.針對一般意義上的調試過程,相信每一位工程師朋友都熟練掌握了.這裏介紹幾個調試中比較實用的高級功能.

遠程調試

由於部署環境的差異性,相信很多朋友都碰到過開發環境正常測試過的功能在測試環境甚至生產環境下出現bug的情況.一般情況下,生產環境可以採取的手段比較單一,即通過日誌的方式獲取運行中的環境上下文,分析日誌文件並嘗試重現bug.這會帶來的問題還是不少的.首先,日誌的分析是一項比較耗時的工作;其次,現有的日誌記錄不一定能反映出問題,你可能需要多次重複這個過程(分析日誌->猜測問題->加日誌->部署->獲取日誌)來慢慢逼近問題.倘若是測試環境,我們還多了一項可供選擇的手段,即遠程調試:將程序在測試環境中以debug模式啓動,在本機使用Eclipse在工程中設置斷點進行調試.

1.將測試環境中的程序以debug模式啓動

倘若是獨立JavaSE程序,只需要在啓動時增加幾個參數即可.
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=11111,suspend=y -jar calc.jar
若正常啓動,你將看到以下畫面:
remote debug server

2.使用Eclipse進行遠程調試

在Eclipse中的對應工程中配置調試屬性,如下:
remote debug client

3.開始遠程調試

點擊上一步中圖中的Debug按鈕開始調試.
一切正常的話,你就可以像調試本地程序一樣開始調試測試環境上的程序了.

4.需要注意的問題

  1. 如果程序需要接收來自控制檯的輸入,應該在測試環境中的控制檯中輸入.

  2. 需要注意測試環境的代碼和開發環境中不一致的情況.如果Eclipse中設置的斷點的行數剛好對應測試環境程序中的空行,將無法跳入斷點,看上去就像調試並沒有成功一樣.這種情況並不會發生在本地調試中,因爲本地調試無法在空行上設置斷點.下面是一個代碼不一致的例子.
    實際代碼對比:
    debugcode
    運行後的效果如下:
    remote debugging
    注意對比2處和3處,在3處本應該有的變量index在2處並沒有出現.

    5.tomcat遠程調試

    對tomcat進行遠程調試是需要將tomcat以debug模式啓動,啓動命令爲(假定用戶已經在tomcat/bin目錄下):
    ./catalina.sh jpda start
    需要注意的是,最新版本的tomcat對調試的監聽地址進行了限制,只允許127.0.0.1訪問,所以如果在非本地機器上調試的話,需要修改設置:
    remote debug tomcat
    將圖中的JPDA_ADDRESS變量由原來的127.0.0.1:8000修改爲8000.
    Eclipse端的設置和第2步中的設置沒有區別.

    條件斷點

    如果需要對循環中的數據進行調試,使用條件斷點是個不錯的選擇.將斷點設置在指定的位置上,右鍵進一步設置斷點屬性,如下:
    condition debug
    調試時,程序會中斷在符合條件處.

    異常斷點

    斷點不僅可以設置在某一行,也可以針對整個工程進行設置.典型的,假設你知道程序會在某個地方拋出NullPointerException,可是並不是每一次運行都會出現,就可以爲工程設置異常斷點,如下:
    project breakpoint
    程序會中斷在出現拋出NullPointerException的地方.

本文中用到的代碼見: github

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章