【问题标题】:Maven & Eclipse remote debugging: connection refusedMaven & Eclipse 远程调试:连接被拒绝
【发布时间】:2020-07-07 15:31:14
【问题描述】:

我正在尝试使用 Maven 和 Eclipse 进行远程调试。在远程机器上,我执行mvnDebug spring-boot:run,在 Eclipse 中的本地机器上,我设置了 Remote Java Application 调试配置,并使用适当的主机 IP 和端口以及连接类型为 Standard (Socket Attach).

在远程机器上,在尝试连接 Eclipse 之前,我只看到:

Preparing to execute Maven in debug mode
Listening for transport dt_socket at address: 8000

ss -aln 显示在端口 8000 上侦听的内容:users:(("java",pid=949917,fd=4))。只要我在本地机器上的 Eclipse 中启动调试过程,常规的 Maven 输出就会出现在远程机器上:

Apache Maven 3.6.3 (NON-CANONICAL_2019-11-27T20:26:29Z_root)                                                 
Maven home: /opt/maven                                                                                       
Java version: 1.8.0_242, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-8-openjdk/jre                
Default locale: en_US, platform encoding: UTF-8                                                              
OS name: "linux", version: "5.5.8-arch1-1", arch: "amd64", family: "unix"                                    
[INFO] Scanning for projects...
...

显然建立了联系。 Maven 的输出与常规运行相同。但是 Eclipse 显示 Failed to connect to remote VM. Connection refused. 没有其他信息,现在远程机器上的 8000 端口上没有任何东西在监听。

我什至不知道如何调试它,而且配置再简单不过了。

mvnDebug 脚本的内容是:

MAVEN_DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"

echo Preparing to execute Maven in debug mode

env MAVEN_OPTS="$MAVEN_OPTS" MAVEN_DEBUG_OPTS="$MAVEN_DEBUG_OPTS" "`dirname "$0"`/mvn" "$@"

任何建议或见解将不胜感激。

【问题讨论】:

  • 我认为你的问题是 springboot:run 分叉进程,就像 maven surefire 所做的那样:docs.spring.io/spring-boot/docs/current/maven-plugin/examples/… 我的猜测是,与 surefire 不同,springboot:run 让 maven 完成。这可以解释为什么您无法与 Eclipse 连接。 mvnDebug主要用于调试maven和插件,而不是你自己的应用程序。
  • 好吧,我似乎什么也没做,但显然我现在可以连接了。我猜是Eclipse SNAFU。没有connection refused错误,Debug视图显示一个正在运行的Remote Java Application线程,但是断点好像没有效果。
  • @NoDataFound 链接中的配置解决了我的问题。如果需要,请将其粘贴到答案中。
  • 是的。我创建了一个答案。

标签: java eclipse spring-boot maven remote-debugging


【解决方案1】:

就像带有分叉测试的 maven-surefire-plugin 一样,springboot 似乎分叉到一个新的 jvm 进程。因此,mvnDebug 在这种情况下不会帮助您:要从 Maven 调试您的 springboot 实例,您必须根据此 link 设置适当的 jvmArguments:

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

虽然我无法解释为什么您无法使用远程调试进行连接,但我的提示是 Spring Boot 让 maven 终止。我没有测试,但这可以解释为什么你不能连接到 Eclipse。

注意mvnDebug主要用于调试maven和插件,而不是你自己的应用程序。

【讨论】:

    【解决方案2】:

    您尝试的运行配置适用于 java 4 及以下版本。

    对于 java 5 及以上版本,请尝试使用 MAVEN_OPTS:

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000

    【讨论】:

    • mvnDebug 是 maven 附带的……它适用于 maven 3.6.x + Java 8(测试过……今年 :))
    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多