握手失败 - 在Intellij中调试Solr时出现连接prematurally关闭错误

don*_*tme 25 java debugging intellij-idea

所以我打算在Intellij Community Edition上调试我的Solr过滤器插件.在我使用此命令从命令提示符运行程序后

java -jar start.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8983
Run Code Online (Sandbox Code Playgroud)

我用这个配置启动了我的Intellij调试器:

Transport : socket
Debugger mode : attach
Host : localhost
Port : 8983
Run Code Online (Sandbox Code Playgroud)

但是当我运行调试器时出现了这个错误:

Error running Debugger: Unable to open debugger port (localhost:8983): 
java.io.IOException "handshake failed - connection prematurally closed"
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

Laz*_*ass 47

尝试访问 Docker 容器上的调试端口时出现该错误。

如果您尝试访问 Docker 容器内的调试端口,请确保将端口指定为 *:5005

例如

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

自 Java 9 以来,这已经发生了变化。

请参阅:回归:远程调试在 JDK 9 上不起作用

这不是一个错误。这是一种安全。

JDK-8041435 之前

如果您有一台带有 EXT 和 INT 接口的服务器,并以地址 = 5900 启动 Java 进程,它将绑定到这两个接口,并允许全世界的任何人连接到您的 Java 进程,除非您在防火墙上阻止它。

在 JDK-8041435 套接字传输后尝试猜测 localhost 并仅绑定到 localhost。即默认情况下套接字传输仅在客户端和服务器位于同一台机器上时才有效。猜测正确的本地主机不是一件容易的事。因此,由于网络设置,在某些情况下,同一台机器的配置可能无法正常工作。

您可以使用 * (asteric) 恢复旧的、不安全的行为,即 -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5900 应该像 JDK-8041435 之前一样工作

但建议在可能的情况下明确指定要绑定的 ip 地址。

并且JDWP 套接字连接器默认只接受本地连接

JDWP 套接字连接器已更改为仅在代理命令行上未指定 ip 地址或主机名时绑定到 localhost。可以使用星号 (*) 主机名来实现旧行为,即将 JDWP 套接字连接器绑定到所有可用接口;这不安全,不推荐。


don*_*tme 13

它应该是这样的,

java "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8983" -jar start.jar

它现在正在运作

  • 在 intelli j 2019.2.4 中,我无法编辑命令行参数。我该如何解决 ?我的命令行参数是 - > -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8787 并且我不断收到以下错误 -> 运行“测试”时出错:无法打开调试器端口(本地主机:8787):java.io.IOException“握手失败 - 连接过早关闭” (11认同)

小智 6

我在 Docker 容器内的 OpenJDK 11 中遇到了此错误,并将环境变量 JAVA_DEBUG_PORT 设置为“*:5005”对我有用。