Eclipse错误:"无法连接到远程VM"

46

当我从Eclipse IDE启动调试时,出现以下错误:

错误信息: “无法连接到远程VM。连接被拒绝”

可能的原因是什么?


你是在调试本地应用程序还是远程应用程序? - Rob H
4
请注意,如果您正在尝试调试本地应用程序并且出现此错误,则可能是因为您的 /etc/hosts (或 C:\WINDOWS\system32\drivers\etc\hosts) 文件中存在针对“localhost”的虚假映射。我以前遇到过这种情况。 - David Citron
请检查您是否错误地指定了端口8080而不是8000。我曾经也犯过这个错误。 - Shriprasad
1
如果您正在调试远程Java应用程序,请打开调试透视图,检查是否已经附加了任何VM。在遇到断点之前,Eclipse无法显示调试透视图。 - Jichao
注意,该端口只能接受 一个 连接,任何后续的连接都将被拒绝。 - IliasT
显示剩余2条评论
26个回答

39

使用 0.0.0.0 作为地址可以允许任何远程机器连接,例如:

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

6
看起来这是最近的更改(JDK 9+)... 如果你只指定了端口,它会接受来自该端口的任何 IP 的连接。现在,你需要手动指定 IP 或者使用 0.0.0.0 如果你希望所有东西都能连接。 - Steven
请为我修复以下问题: openjdk版本“1.8.0_232” OpenJDK运行时环境(AdoptOpenJDK)(构建1.8.0_232-b09) OpenJDK 64位服务器VM(AdoptOpenJDK)(构建25.232-b09,混合模式) - Xanlantos
我希望能够更容易地找到这个答案......我差点放弃了在树莓派上使用Maven进行远程调试的配置。 - jawsware
1
或者使用 * 代替 0.0.0.0。 - Suma

34

您是否设置了远程虚拟机以接受连接?

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=10000,suspend=n yourServer

是否存在防火墙的限制?

您是否正确指定了主机/端口?

您是否已连接到 VPN?


6
对我来说问题出在不小心将调试标志添加到命令行的末尾,因此它们被直接传递给了程序本身。 - Sam Brightman
4
参数“yourServer”与什么匹配? 它似乎是一个Java类...如何正确设置? - nonozor
我的Eclipse调试配置更改了我的端口号。:( - user2847749
我已经重新安装了(通过RPM),但忘记修改我的/etc/init.d脚本以包含jpda标志。 - InfernalRapture
关闭VPN连接帮了我 :) - gbgnv
显示剩余4条评论

33

从Eclipse中删除代理!

在常规偏好设置的“网络连接”中(Windows->首选项),将“活动提供程序”设置为“直接”。

删除代理

之后重新启动Eclipse


你还在遇到这个问题吗? - Natan Lotério
1
这是在Windows->偏好设置中。 - ConfusedDeer
对我不起作用。 - chance
在2023年对我有用! - user613114

4
David Citron是正确的 - 如果localhost无法正确解析,可能会导致此问题。以下是测试方法:
如果您的PC未连接到网络(没有WiFi,没有网络电缆),则可以正常工作。如果在这些条件下工作,则可能需要确保地址正确解析为localhost。 DDMS和adb.exe用于调试和与VM通信的消息必须在PC上正确解析为localhost。(是的,奇怪的是,使用DDMS和adb的其他命令都可以正常工作,但调试不行。似乎需要标准化DDMS或adb中的某些内容,以便它们在相同条件下都能正常工作。)
如果您需要确保事物正确解析为localhost,请执行以下操作:
1)确保此行位于您的/ Windows / System32 / drivers / etc / hosts文件中:
127.0.0.1 localhost
(“127.0.0.1”和“localhost”之间可以有任意数量的空格)
并且 - 如David Citron所建议的那样 - 确保主机文件有效,并且没有垃圾或错误。
2)如果这样做不起作用,则可能还需要将PC的IPv4地址添加到主机文件中,并将其解析为localhost。 (您可以使用ipconfig命令找出计算机的IPv4地址。)例如,如果计算机的IPv4地址为192.168.1.100,则应将该行添加到主机文件中:
192.168.1.100 localhost
(您可以在文件中127.0.0.1 localhost行下方添加它。)
您可以使用netstat -b命令验证adb(以及如果正在运行一个,则是模拟器)是否侦听端口。 (请注意,您需要管理员权限才能使用-b选项。我使用“以管理员身份运行”打开命令窗口。)

而对于Mac和Linux呢? - Xanlantos
@Xanlantos,您需要检查其他答案。 - aenw

3
可能引起此错误的原因如下:
  1. 您的远程Java应用程序未运行。
  2. 检查您的主机和端口,很多时候这些条目都不正确。
  3. 防火墙不允许访问您的远程端口。
您也可以参考Eclipse远程调试指南获取更多详细信息。

2
要检查第三个选项,可以使用 telnet。例如:telnet <host> <port>。 - Manu
还有其他可能导致这个错误的原因吗?对我来说,主机和端口号都是正确的,我正在尝试调试一个本地运行的服务。 - committedandroider

2
我在Eclipse中解决了这个问题:
Windows --> Preferences --> Java --> Debug --> Debugger timeout: 10000

之前我设置了"调试器超时时间: 3000",但是遇到了超时问题。


仍然出现“无法连接到远程VM。连接被拒绝。” - Amitkumar Karnik

2

添加到您的运行脚本中:

export JPDA_ADDRESS=8787
export JPDA_TRANSPORT=dt_socket
export JPDA_HOST=localhost

JAVA_OPTS=$JAVA_OPTS -Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000
JAVA_OPTS=$JAVA_OPTS -Dsun.rmi.dgc.server.gcInterval=3600000
JAVA_OPTS=-Xdebug -Xnoagent -Xrunjdwp:transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=n $JAVA_OPTS

你想在哪里运行这些脚本?是在本地还是远程虚拟机上,我们正在尝试连接的那台机器上? - Jeff Cook

2
我们的开发镜像只安装了Tomcat服务,因此设置环境变量等没有任何效果。如果您需要通过Tomcat Windows服务进行操作,有一些事情需要注意:
  • David Citron的评论是我需要让连接工作的最后一步。我们机器上的hosts文件注释掉了localhost(它应该通过DNS解析,但这对于调试连接不起作用)。我取消了注释并成功连接。
  • 如果用户访问控制被打开,您将需要使用管理员凭据访问服务控制面板、Tomcat监视器应用程序或任何您用来切换服务器状态的工具。监视器应用程序(文档)可能是最好的选择,因为您可以编辑调试选项的服务器设置并启动和停止服务器。
  • 我认为也许您需要以管理员身份运行Eclipse才能终止Tomcat进程,但实际上不需要。一旦您拥有了远程附加功能,就可以在终止之前使用服务。

1
另一种可能性是调试代理绑定到了错误的网络接口。我在尝试在VirtualBox VM中调试Windows 10 JVM并且正在尝试从运行在VirtualBox主机上的Eclipse连接时遇到了这个问题。在我的情况下,代理只绑定到了127.0.0.1接口。
要解决此问题,您可以限定包括要绑定到的接口的IP地址。例如:
java -agentlib:jdwp=transport=dt_socket,server=y,address=192.168.0.5:8000,suspend=n <other arguments>

1
我正要添加和Dan一样的东西。我试图调试的服务器有两个NIC,而jdwp服务器绑定到错误的那一个上。通过显式设置address=xxx.xxx.xxx.xxx:8000,我成功连接了。 - Andrew Wynham

1
以下内容对我有用:编辑tomcat的startup.sh文件的最后一行。
exec "$PRGDIR"/"$EXECUTABLE" start "$@"`

export JPDA_ADDRESS=8000 export JPDA_TRANSPORT=dt_socket  
exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@" 

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