zoukankan      html  css  js  c++  java
  • Eclipse远程调试(远程服务器端监听)

    前提:远程服务器上运行的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中进行配置的<Connector port="8080" ....>,不要混淆

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

    总结

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

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

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

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

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

  • 相关阅读:
    使用SO_REVTIMEO套接字选项为recvfrom设置超时
    使用select为描述符设置超时
    套接字超时设置方法
    使用SIGALARM为recvfrom设置超时
    使用SIGALARM为connect设置超时
    20200410 阿里巴巴Java开发手册
    20200409 Vue 视频学习【归档】
    20200319 Spring MVC 官方文档【归档】
    20200319 Spring Web MVC 2-5
    20200319 Spring Web MVC 1
  • 原文地址:https://www.cnblogs.com/jianliang-Wu/p/7110681.html
Copyright © 2011-2022 走看看