Eclipse遠程調(diào)試(遠程服務器端監(jiān)聽)博客分類:
IDE技巧前提:遠程服務器上運行的WEB項目class對應的源碼與本地項目中必須保持一致
也就是遠程tomcat部署的項目就是本機項目打包過去的,而本機項目沒有發(fā)生變動
遠程服務器端
服務器端配置eclipse調(diào)試器監(jiān)聽端口,有兩種方式,任選其一
第一種方式:
環(huán)境變量
export JPDA_ADDRESS=9999
啟動tomcat
使用sh catalina.sh jpda start啟動
注意:不要用startup.sh
通過這條命令啟動tomcat,會監(jiān)聽JPDA_ADDRESS設置的端口,等待調(diào)試器連接。
如果不配置JPDA_ADDRESS,默認監(jiān)聽8000端口
第二種方式:
配置$tomcat_home/bin/catalina.sh
加上如下一行
JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9988"
說明:server=y 是指目標應用程序作為服務監(jiān)聽將要連接的遠程調(diào)試器(常用);
suspend=y 是指目標VM將暫停,直到調(diào)試器應用程序進行連接(若需要調(diào)試啟動錯誤,很有用);
suspend=n 是指目標VM不暫停;
address=9988 監(jiān)聽端口。
啟動tomcat
直接通過startup.sh啟動即可
通過ps -aux|grep tomcat查看啟動的tomcat進程,剛才配置的-Xdebug等選項出現(xiàn)在進程信息中,證明配置成功
本機調(diào)試端
調(diào)試器配置
在本地eclipse中點擊debug按鈕,選擇Debug Configurations....,如下圖
點擊選項后,彈出一個窗口,雙擊左側Remote Java Application,如下圖
Name:自定義,任意名稱
Project:本機eclipse中的WEB項目,與遠端服務器上部署的WEB項目一致
Host:被調(diào)試的遠端服務器ip
Port: 遠端服務器中環(huán)境變量JPDA_ADDRESS的值
配置完成后點擊Apply,隨后點擊Debug,eclipse窗口右下角出現(xiàn)
這里ConnectionType我們選擇的是Standard(Socket Attach)方式調(diào)試
等待這個進度條跑完,直到consle的紅色按鈕變成灰色,此時已經(jīng)完成了服務器端調(diào)試準備
測試調(diào)試
源碼打斷點
在本機eclipse源碼中找到一處要調(diào)試的地方,打上斷點
比如,我在一處webservice的service入口類中某一方法testAdd中加入斷點
測試接口,進入斷點
比如,我測試自己的WebService接口
private static String endpoint = "http://123.125.114.144:8080/JavaUtils/services/TestService?wsdl";
private static Call call = null;
@BeforeClass
public static void init(){
Service service = new Service();
try {
call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
} catch (ServiceException e) {
e.printStackTrace();
}
}
@Test
public void testRemoteDebug(){
String method = "testAdd";
// 調(diào)用遠程方法
try {
String value = "testValue"
Object ret = call.invoke(
method,
new Object[] {value);
System.out.println(ret.toString());
} catch (AxisFault e) {
System.err.println(e.getFaultString());
}
}
執(zhí)行單元測試,調(diào)用服務器端WebService服務的testAdd方法,傳入value值
此時eclipse進入debug狀態(tài),跳到剛才打斷點的51行,
這樣就可以像本機一樣F6,F(xiàn)5進行跟蹤和調(diào)試遠程程序了
注意:服務器端配置的環(huán)境變量JPDA_ADDRESS雖然是端口,但是只是調(diào)試器監(jiān)聽端口,但是與tomcat中部署項目運行的端口是不一樣的,web項目運行端口是在tomcat_home/conf/server.xml中進行配置的<Connector port="8080" ....>,不要混淆
至此完整的eclipse遠程調(diào)試步驟已經(jīng)描述清楚
總結
Standard(Socket Attach)方式進行服務器端監(jiān)聽的優(yōu)缺點:
先啟動遠程java程序 然后 啟動Eclipse遠程調(diào)試,然后可以正常調(diào)試系統(tǒng)
缺點 :只有java程序啟動后才能進行調(diào)試,無法調(diào)試java程序的啟動過程,如果要全程調(diào)試需要使用另外一種方式,我會總結成另一篇文章
優(yōu)點 :可以隨時連接到遠程java程序進行調(diào)試
PS:這種調(diào)試方式最常用的
補充: