【问题标题】:Failed to connect to remote VM. Connection refused. while tring to debug jar无法连接到远程虚拟机。拒绝连接。同时尝试调试 jar
【发布时间】:2012-06-17 03:08:00
【问题描述】:

我正在尝试使用远程 JAVA 应用程序调试来调试 jar 文件。 我收到“无法连接到远程虚拟机”。拒绝连接。'错误 以下是堆栈跟踪..

java.net.ConnectException:连接被拒绝:连接 在 java.net.DualStackPlainSocketImpl.connect0(本机方法) 在 java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) 在 java.net.Socket.connect(Socket.java:579) 在 java.net.Socket.connect(Socket.java:528) 在 java.net.Socket.(Socket.java:425) 在 java.net.Socket.(Socket.java:208) 在 org.eclipse.jdi.internal.connect.SocketTransportService$2.run(SocketTransportService.java:136) 在 java.lang.Thread.run(Thread.java:722)

【问题讨论】:

    标签: eclipse debugging remote-debugging


    【解决方案1】:

    您是否记得在您尝试连接的 JVM 上启用调试?当您运行远程 JVM 时,这是通过 JAVA_OPTS 完成的。

    例如,要为 tomcat 添加调试,您可以在启动 java 进程时添加这些 JAVA_OPTS:

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

    【讨论】:

    • 是的,我正在使用以下命令 java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=55500 -jar myjar.jar 我也在 E​​clipse 调试配置中使用相同的端口号并在命令中
    • 它能够找到错误,调试配置中的主机IP在我的情况下应该是我的本地机器......
    【解决方案2】:

    确保在引用 Java 程序之前添加调试标志,否则它们将被传递给程序本身而不是 Java。

    此外,Eclipse 有时会很奇怪,当您运行“调试配置”时,它不会自动切换到“调试”透视图。建立成功的调试会话后,如果您再次运行它并认为它没有运行和/或静默失败,那么您会收到错误消息:“无法连接到远程 VM。连接被拒绝。”因此,请始终切换到“调试”视角以查看发生了什么。

    【讨论】:

    • 谢谢,切换到调试视图成功了。这太愚蠢了!这些问题是我讨厌日食的原因。
    【解决方案3】:

    如果其他人观察到这种行为并检查了他们的 Java 命令行参数、端口号和主机名,我可以通过重新启动 Eclipse 来解决这个问题。

    【讨论】:

      【解决方案4】:

      对于较新版本的 java,参数应该是:

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

      (suspend 可以是 y 或 n,具体取决于您是否希望 java 进程等到您附加调试器后再执行程序)。

      【讨论】:

        【解决方案5】:

        我不确定这有多普遍,但是...
        (在名为“tahoeServer”的树莓派上运行 openjdk 14+36)

        你必须告诉 JVM 使用哪个接口。如果你只是说

        -agentlib:jdwp=transport=dt_socket,server=y,address=4445

        然后 JVM 将在“localhost”接口上进行侦听,并且不允许真正的远程调试。但是,如果你说

        -agentlib:jdwp=transport=dt_socket,server=y,address=tahoeServer.local:4445

        将允许来自远程机器的连接。

        同样,我不知道在其他版本的 JVM 或其他操作系统上是否如此。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-07
          • 2015-02-08
          • 2012-08-26
          • 2015-07-19
          • 1970-01-01
          • 2013-07-08
          • 1970-01-01
          相关资源
          最近更新 更多