无法连接到远程虚拟机。在尝试调试JAR时连接被拒绝。

3
我正在尝试使用远程JAVA应用程序调试来调试jar文件。但是,我遇到了“无法连接到远程VM。连接被拒绝。”错误。以下是堆栈跟踪:
java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) at java.net.Socket.connect(Socket.java:579) at java.net.Socket.connect(Socket.java:528) at java.net.Socket.(Socket.java:425) at java.net.Socket.(Socket.java:208) at org.eclipse.jdi.internal.connect.SocketTransportService$2.run(SocketTransportService.java:136) at java.lang.Thread.run(Thread.java:722)
5个回答

3

您是否记得在尝试连接的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 同时,我在Eclipse调试配置和命令中使用相同的端口号。 - shraddha
1
它能够找到错误,调试配置中的主机IP在我的情况下不同,应该是我的本地机器... - shraddha

1

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

此外,Eclipse有时会出现问题,当您运行“Debug Configuration”时,它不会自动切换到“Debug”视图。在成功建立调试会话之后,如果您再次运行它,认为它没有运行或静默失败,则会收到错误消息:“无法连接到远程VM。拒绝连接。”因此,请始终切换到“Debug”视图以查看发生了什么。


1
谢谢,切换到调试视图解决了问题。这太蠢了!这种问题就是我讨厌 Eclipse 的原因。 - mKay

0
如果有其他人也遇到了这个问题,并且已经检查了他们的Java命令行参数、端口号和主机名,我能够通过重新启动Eclipse来解决这个问题。

0

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

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

(suspend可以是y或n,取决于您是否希望Java进程在执行程序之前等待调试器附加)。


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或其他操作系统。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接