使用Eclipse进行远程调试

本文介绍在不更改配置的情况下远程调试 Java 程序和 tomcat 程序。

远程调试Java程序

测试代码 HelloWorld.java

 

1 package com.sunyzc;
2  
3 public class HelloWorld {
4   public static void main(String[] args) {
5     System.out.println("Hello World1!");
6     System.out.println("Hello World2!");
7     System.out.println("Hello World3!");
8   }
9 }

将以上代码打成jar包(remoteDebug.jar)上传到目标机器(远程或本地)。

 

要进行调试,必须将调试 JDWP 代理加载到应用程序的 JVM 中。从 Java 5.0 开始,可以用 -agentlib:jdwp 选项来完成加载。5.0 以前版本则使用 -Xdebug 和 -Xrunjdwp 选项(5.0 也支持 -Xdebug 和 -Xrunjdwp 选项,不过新的 -agentlib:jdwp 选项更加好用。因为 5.0 中的 JDWP 代理使用 JVMTI 接口连接 VM,而非旧的 JVMDI 接口)。你应该向 -agentlib:jdwp(Java 5.0中)或 -Xrunjdwp(Java 5.0以前版本) 参数提供子选项;两组可能的子选项相同。

1 -agentlib:jdwp=[=],[=]... 或
2 -Xrunjdwp:[=],[=]...

 

子选项参数说明:

  • transport:这里通常使用套接字传输器(dt_socket)。如果被调试者和调试器位于同一机器之中,且运行的是 Windows 系统,可以使用共享内存连接器(dt_schmem)。
  • server:如果值为 y,目标应用程序监听将要连接的调试器应用程序。否则,它将连接到特定地址上的调试器应用程序。
  • address:连接的传输地址。如果 server= n,将尝试连接到该地址上的调试器应用程序。否则将在这个端口监听连接。
  • suspend:如果值为 y,目标 VM 将暂停,直到调试器应用程序进行连接。

在目标机器上运行:

1 java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 -jar remoteDebug.jar

windows下效果

1 java -agentlib:jdwp=transport=dt_socket,server=y,address=8000 -jar remoteDebug.jar

windows下效果

 

此时目标机器处于等待调试状态,在 eclipse 中设置代码断点,然后在 Debug configurations 的 Remote Java Application 中添加一个启动配置,具体如下:

远程调试Java程序配置

 

连接类型(Connection Type)有两种,这两种连接器对应用程序调试没有影响,可以任意选择:

  • Socket Attach:连接套接字的连接器,目标 VM 将作为主机。
  • Socket Listen:监听套接字的连接器,Eclipse VM 将是与远程 Java 应用程序连接的主机。

 

点击 Debug 即进入调试模式:

远程调试Java程序效果

 

调试 eclipse 代码即见目标机器执行效果:

windows下目标机器调试执行效果

windows下目标机器调试执行效果

 

目标机器可能会报以下错误:

Failed to load Main-Class

是由于 remoteDebug.jar 中的 manifest.mf 文件里面没有指定 Main-Class,可在 manifest.mf 文件里添加内容:

1 Main-Class: com.sunyzc.HelloWorld

也可在目标机器这样启动程序:

1 java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 -classpath remoteDebug.jar com.sunyzc.HelloWorld 或
2 java -agentlib:jdwp=transport=dt_socket,server=y,address=8000 -classpath remoteDebug.jar com.sunyzc.HelloWorld

 

远程调试tomcat程序

远程调试 tomcat 参照以下方式执行即可:

1 %CATALINA_HOME%/bin/startup.bat (正常启动)
2 %CATALINA_HOME%/bin/catalina.bat jpda start (远程调试)

启动tomcat以远程调试

 

eclipse 中同样设定断点,并在 Debug configurations 的 Remote Java Application 中添加启动配置。如以下示例,将断点设在用户登录时,当点击“登录”后 eclipse 即进入调试模式:

远程调试tomcat配置

调试中的web页面

远程调试tomcat的效果

 

 

posted @ 2014-03-09 00:35  砺能  阅读(325)  评论(0编辑  收藏  举报