Eclipse 远程调试(远程服务器端监听 )

本贴最后更新于 2107 天前,其中的信息可能已经时移世异

前提:远程服务器上运行的 WEB 项目 class 对应的源码与本地项目中必须保持一致

也就是远程 tomcat 部署的项目就是本机项目打包过去的,而本机项目没有发生变动

远程服务器端

服务器端配置 eclipse 调试器监听端口,有两种方式,任选其一

第一种方式:

环境变量

export JPDA_ADDRESS=9999

启动 tomcat

使用 sh catalina.sh jpda start 启动

注意:不要用 startup.sh

通过这条命令启动 tomcat,会监听 JPDA_ADDRESS 设置的端口,等待调试器连接。

如果不配置 JPDA_ADDRESS,默认监听 8000 端口

第二种方式:

配置 $tomcat_home/bin/catalina.sh

加上如下一行

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9988"

|

说明:server=y 是指目标应用程序作为服务监听将要连接的远程调试器(常用);

 suspend=y 是指目标VM将暂停,直到调试器应用程序进行连接(若需要调试启动错误,很有用);

 suspend=n 是指目标VM不暂停;

 address=9988 监听端口。

|

启动 tomcat

直接通过 startup.sh 启动即可

通过 ps -aux|grep tomcat 查看启动的 tomcat 进程,刚才配置的-Xdebug 等选项出现在进程信息中,证明配置成功

本机调试端

调试器配置

在本地 eclipse 中点击 debug 按钮,选择 Debug Configurations....,如下图

点击选项后,弹出一个窗口,双击左侧 Remote Java Application,如下图

Name:自定义,任意名称

Project:本机 eclipse 中的 WEB 项目,与远端服务器上部署的 WEB 项目一致

Host:被调试的远端服务器 ip

Port: 远端服务器中环境变量 JPDA_ADDRESS 的值

配置完成后点击 Apply,随后点击 Debug,eclipse 窗口右下角出现

这里 ConnectionType 我们选择的是 Standard(Socket Attach)方式调试

等待这个进度条跑完,直到 consle 的红色按钮变成灰色,此时已经完成了服务器端调试准备

测试调试

源码打断点

在本机 eclipse 源码中找到一处要调试的地方,打上断点

比如,我在一处 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";

          // 调用远程方法

          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());

          }

   }

|

执行单元测试,调用服务器端 WebService 服务的 testAdd 方法,传入 value 值

此时 eclipse 进入 debug 状态,跳到刚才打断点的 51 行,

这样就可以像本机一样 F6,F5 进行跟踪和调试远程程序了

注意:服务器端配置的环境变量 JPDA_ADDRESS 虽然是端口,但是只是调试器监听端口,但是与 tomcat 中部署项目运行的端口是不一样的,web 项目运行端口是在 tomcat_home/conf/server.xml 中进行配置的,不要混淆

至此完整的 eclipse 远程调试步骤已经描述清楚

总结

Standard(Socket Attach)方式进行服务器端监听的优缺点:

先启动远程 java 程序 然后 启动 Eclipse 远程调试,然后可以正常调试系统

缺点 :只有 java 程序启动后才能进行调试,无法调试 java 程序的启动过程,如果要全程调试需要使用另外一种方式,我会总结成另一篇文章

优点 :可以随时连接到远程 java 程序进行调试

PS:这种调试方式最常用的

  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...