Eclipse遠程調(diào)試Java代碼的三種方法潜圃,
第1種方法是用來調(diào)試已經(jīng)啟動的Java程序坯汤,Eclipse可以隨時連接到遠程Java程序進行調(diào)試,
第2種方法可以調(diào)試Java程序啟動過程铸磅,但是Eclipse不能隨時連接到遠程Java程序進行調(diào)試筷弦,
第3種方法可以同時具備上面兩種的優(yōu)點,在調(diào)試Java程序啟動過程后术唬,
即使斷開后Eclipse還是可以隨時連接到遠程Java程序進行調(diào)試薪伏。
在實際使用過程,一般使用第1種調(diào)試方法碴开,
在需要調(diào)試Java程序啟動過程的時候毅该,才會使用第3種方法,
第3種和第1種方法的區(qū)別只是在于suspend=y/n潦牛,
第2種方法一般很少使用眶掌。
1.Java程序開啟遠程Debug
在程序的JVM啟動參數(shù)加入如下Debug參數(shù):
-Xdebug -Xrunjdwp:transport=dt_socket,address=1088,server=y,suspend=n
參數(shù)說明:
-Xdebug 啟用調(diào)試
-Xrunjdwp 加載JDWP的JPDA參考執(zhí)行實例
transport 用于在調(diào)試程序和JVM使用的進程之間通訊
dt_socket 套接字傳輸
address=1088 調(diào)試服務(wù)器的端口號,客戶端用來連接服務(wù)器的端口號
server=y/n JVM是否需要作為調(diào)試服務(wù)器執(zhí)行
suspend=y/n 是否在調(diào)試客戶端建立連接之后啟動JVM 巴碗。
2.Eclipse遠程調(diào)試Java代碼的前2種方法
下面的圖表示的是Eclipse調(diào)試的兩種類型朴爬,
圖片下半部分是第1種Socket Attach類型,表示遠程程序正常運行橡淆,允許Eclipse調(diào)試器隨時連接到JVM召噩,
圖片上半部分是第2種Socket Listen類型母赵,表示Eclispe調(diào)試器先啟動監(jiān)聽,JVM啟動時主動連接調(diào)試器具滴。
2.1.第1種Socket Attach調(diào)試方法
遠程JVM的Debug參數(shù)配置:
-Xdebug -Xrunjdwp:transport=dt_socket,address=1088,server=y,suspend=n
注意suspend=n凹嘲,表示立即啟動JVM,不等待調(diào)試客戶端建立連接构韵。
Eclipse調(diào)試器配置:
Eclipse -> Run -> Debug Configurations... -> Remote Java Application -> 右鍵點擊New
打開一個默認名為New_configuration的調(diào)試配置界面周蹭,如下:
Connection Type: Socket Attach
Host: localhost (遠程Java程序所在的主機IP)
Port: 1088 (遠程Java程序的調(diào)試端口)
點擊Debug即可連接到已經(jīng)啟動的遠程Java程序進行調(diào)試,
但是不能調(diào)試Java程序啟動過程疲恢。
2.2.第2種Socket Listen調(diào)試方法
遠程JVM的Debug參數(shù)配置:
-agentlib:jdwp=transport=dt_socket,suspend=y,address=192.168.0.1:1088
注意address需要填寫Eclipse調(diào)試器所在的IP地址和Port端口凶朗。
Eclipse -> Run -> Debug Configurations... -> Remote Java Application -> 右鍵點擊New
打開一個默認名為New_configuration的調(diào)試配置界面,如下:
Connection Type: Socket Listen
Port: 1088 (遠程調(diào)試端口)
點擊Debug先啟動Eclipse監(jiān)聽显拳,
然后啟動遠程JVM程序棚愤,會主動Eclipse調(diào)試器進行調(diào)試,
這種方法可以調(diào)試Java程序啟動過程杂数,
但是不能隨時連接到遠程java程序進行調(diào)試宛畦。
3.第3種調(diào)試方法
第3種調(diào)試方法和第1中調(diào)試方法類似,
區(qū)別在于遠程JVM的Debug參數(shù)中suspend=y:
-Xdebug -Xrunjdwp:transport=dt_socket,address=1088,server=y,suspend=y
具體流程是先啟動遠程的Java程序耍休,
但此時JVM不會真正啟動刃永,會等待調(diào)試客戶端建立連接之后再啟動JVM,
然后參考第一種方法啟動Eclipse的Socket Attach類型調(diào)試器羊精,
此時JVM會真正的啟動,而且已經(jīng)連接上Eclipse的調(diào)試器囚玫,
可以調(diào)試Java程序啟動過程喧锦,而且即使斷開后,
Eclipse還是可以隨時連接到遠程Java程序進行調(diào)試抓督,
缺點在于必須啟動Eclipse調(diào)試器監(jiān)聽燃少,
否則會導(dǎo)致JVM程序無法啟動一直在等待。