我正在尝试使用Remote JAVA Application debug调试jar文件。 我收到'无法连接到远程VM。拒绝连接。'错误 以下是堆栈跟踪..
java.net.ConnectException:拒绝连接:连接 at java.net.DualStackPlainSocketImpl.connect0(Native Method) 在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) 在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)
答案 0 :(得分:2)
您是否记得在要连接的JVM上启用调试?当您运行远程JVM时,这是通过JAVA_OPTS完成的。
例如,要向tomcat添加调试,您可以在启动java进程时添加这些JAVA_OPTS:
-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
答案 1 :(得分:0)
如果其他人正在观察此行为并检查了其Java命令行参数,端口号和主机名,则可以通过重新启动Eclipse来解决此问题。
答案 2 :(得分:0)
请确保在引用Java程序之前添加调试标志,否则它们将传递给程序本身而不是Java。
此外,Eclipse有时可能很奇怪,并且在运行“调试配置”时它不会自动切换到“调试”透视图。建立成功的调试会话后,如果再次运行它以为它没有运行和/或以静默方式失败,则会收到错误消息:“无法连接到远程VM。连接被拒绝。”因此,请始终切换到“调试”透视图以查看发生了什么。
答案 3 :(得分:0)
对于最新版本的java,参数应该是:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=XXXX
(暂停可以是 y 或 n,具体取决于您是否希望 Java 进程在执行程序之前等待直到附加调试器)。
答案 4 :(得分: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 或其他操作系统。