3

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

java.net.ConnectException:连接被拒绝:在 java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) 在 java.net.DualStackPlainSocketImpl.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。在 java.lang.Thread.run(Thread.java:722) 处运行(SocketTransportService.java:136)

4

5 回答 5

3

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

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

-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
于 2012-06-14T05:30:00.230 回答
1

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

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

于 2020-04-18T15:58:59.347 回答
0

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

于 2019-10-11T21:50:52.550 回答
0

对于 Java 的更新版本,参数应该是:

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

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

于 2021-02-23T22:01:21.940 回答
0

我不确定这是多么普遍,但是......
(在名为“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 或其他操作系统上是否正确。

于 2021-03-25T16:39:09.997 回答