Java项目开启远程调试(tomcatspringboot)

Posted WSYW126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java项目开启远程调试(tomcatspringboot)相关的知识,希望对你有一定的参考价值。

当我们运行一个项目的时候,一般都是在本地进行debug。但是如果是一个分布式的微服务,这时候我们选择远程debug是我们开发的利器。

环境

apache-tomcat-8.5.16

Linux

如何启用远程调试

tomcat开启远程调试

方法

切换到你的tomcat的bin目录/apache-tomcat-8.5.16/bin
下,执行:

./catalina.sh jpda start  

执行上面的命令就可以开启远程debug了,如果想配置一些信息,比如端口号什么的,请参考下面的说明。

参数说明

#   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"
#                   command is executed. The default is "dt_socket".
#
#   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. The default is localhost:8000.
#
#   JPDA_SUSPEND    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. Specifies whether JVM should suspend
#                   execution immediately after startup. Default is "n".
#
#   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"
#                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
#                   and JPDA_SUSPEND are ignored. Thus, all required jpda
#                   options MUST be specified. The default is:
#
#                   -agentlib:jdwp=transport=$JPDA_TRANSPORT,
#                       address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND

操作说明

所以如果想修改配置,则如下操作:

  1. 在catalina.sh中进行配置:

    JPDA_TRANSPORT=dt_socket  
    JPDA_ADDRESS=5005  
    JPAD_SUSPEND=n  
  2. 或者通过JPDA_OPTS进行配置:

    JPDA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005’

springboot开启远程调试

远程调试maven设置

The run goal forks a process for the boot application. It is possible to specify jvm arguments to that forked process. The following configuration suspend the process until a debugger has joined on port 5005

<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>1.1.12.RELEASE</version>
        <configuration>
          <jvmArguments>
            -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
          </jvmArguments>
        </configuration>
        ...
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>

These arguments can be specified on the command line as well, make sure to wrap that properly, that is:

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

jar 命令开启远程调试

在执行jar的时候,添加上参数。如下:

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar demo.jar

如果想深入了解Java调试,那么去看一下这个吧。深入Java调试体系

问题

如果出现Connection refused

首先检查一下端口8000的使用情况:

use:~/tomcat/logs # netstat -an|grep 8000
cp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN

可见当前16808端口服务被绑定了回环地址,外部无法访问。即本地调试。

办法:

修改catalina.sh中一个参数。

if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="0.0.0.0:8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi

JPDA_ADDRESS="localhost:8000" 把默认值(localhost:8000)改成0.0.0.0:8000。默认是本地ip调试也就是无法远程调试,0.0.0.0表示所有ip地址都能调试。

远程连上后再看端口情况:

root@VM-198-217-ubuntu:/opt/apache-tomcat-8.5.16/bin# netstat -an | grep 8000
tcp        0      0 10.133.198.217:8000     60.177.99.27:49998      ESTABLISHED

断开后是这样的:

root@VM-198-217-ubuntu:/opt/apache-tomcat-8.5.16/bin# netstat -an | grep 8000
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN
tcp        0      0 10.133.198.217:8000     60.177.99.27:49998      TIME_WAIT

idea连接远程端口进行远程debug

我已经在服务器上开启了远程调试,idea连接的步骤,直接上图。

  1. edit configurations

  2. 远程调试配置

  3. 参数配置

    将红框内的地址和端口号改成自己的。

  4. 启动远程调试

  5. 成功界面

  6. 请求一下试试

调试的姿势和本地调试一样,开始造起来吧!


参考资料:
网上资料
备注:
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/74853680
作者:WSYW126

以上是关于Java项目开启远程调试(tomcatspringboot)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Idea 远程调试 Java 代码

Java使用Eclipse进行远程调试,Linux下开启远程调试

Java使用Eclipse进行远程调试,Windows下开启远程调试

开启Java远程调试

Idea远程调试

javaweb项目容器开启远程Debug