爲了準備調試,你須要在代碼中設置一個斷點先,以便讓調試器暫停執行容許你調試,不然,程序會從頭執行到尾,你就沒有機會調試了。html
斷點你們都比較熟悉,在Eclipse Java 編輯區的行頭雙擊就會獲得一個斷點,代碼會運行到此處時中止。java
條件斷點,顧名思義就是一個有必定條件的斷點,只有知足了用戶設置的條件,代碼纔會在運行到斷點處時中止。服務器
在斷點處點擊鼠標右鍵,選擇最後一個"Breakpoint Properties"eclipse
斷點的屬性界面及各個選項的意思以下圖,socket
斷點不只能打在語句上,變量也能夠接受斷點,spa
上圖就是一個變量的打的斷點,在變量的值初始化,或是變量值改變時能夠中止,固然變量斷點上也是能夠加條件的,和上面的介紹的條件斷點的設置是同樣的。線程
方法斷點就是將斷點打在方法的入口處,debug
方法斷點的特別之處在於它能夠打在 JDK的源碼裏,因爲 JDK 在編譯時去掉了調試信息,因此普通斷點是不能打到裏面的,可是方法斷點卻能夠,能夠經過這種方法查看方法的調用棧。調試
代碼停在了斷點處,可是傳過來的值不正確,如何修改一下變量值保證代碼繼續走正確的流程,或是說有一個異常分支總是進不去,能不能調試時改一下條件,看一下異常分支代碼是否正確?server
在Debug 視圖的 Variables 小窗口中,咱們能夠看到 mDestJarName 變量的值爲 "F:\Study\eclipsepro\JarDir\jarHelp.jar "
咱們能夠在變量上右鍵,選擇"Change Value..." 在彈出的對話框中修改變量的值,
或是在下面的值查看窗口中修改,保用Ctr+S 保存後,變量值就會變成修改後的新值了。
這種調試的回退不是萬能的,只能在當前線程的棧幀中回退,也就說最多隻能退回到當前線程的調用的開始處。
回退時,請在須要回退的線程方法上點右鍵,選擇 "Drop to Frame"
用於調試不在本機上的程序,有兩種方式,
一、本機做爲客戶端
二、本機做爲服務端
使用遠程調試的前提是服務器端和客戶端的代碼是一致的。
本機做客戶端比較經常使用,須要在遠端的服務器上的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 應用程序】
好像漏了一個斷點,異常斷點,補一下。
常常碰見一些異常,而後程序就退出來了,要找到異常發生的地方就比較難了,還好能夠打一個異常斷點,
上圖中咱們增長了一個NullPointException的異常斷點,當異常發生時,代碼會停在異常發生處,定位問題時應該比較有幫助。
轉載自: http://blog.sina.com.cn/s/blog_4cd5d2bb0101azc1.html