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

时间:2015-06-16 03:32:09

标签: java debugging intellij-idea

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

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

我使用此配置启动了我的Intellij调试器:

Transport : socket
Debugger mode : attach
Host : localhost
Port : 8983

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

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

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

5 个答案:

答案 0 :(得分:34)

尝试访问Docker容器上的调试端口时遇到了该错误。

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

例如

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

这是自Java 9以来的变化。

请参阅:REGRESSION: Remote debugging does not work on JDK 9

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

在JDK-8041435之前

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

在JDK-8041435套接字传输之后,尝试猜测localhost并仅绑定到localhost。即默认情况下,套接字传输仅在客户端和服务器都位于同一台计算机上时才起作用。猜测适当的本地主机并非易事。因此在某些情况下,由于网络设置,同一台机器可能无法正常工作。

您可以使用*(星号)恢复旧的,不安全的行为 即 -agentlib:jdwp = transport = dt_socket,server = y,suspend = y,address = *:5900 应该与JDK-8041435之前的版本完全一样

但是,建议尽可能明确指定要绑定的IP地址。

还有JDWP socket connector accept only local connections by default

仅当在代理命令行上未指定IP地址或主机名时,JDWP套接字连接器已更改为绑定到localhost。主机名星号(*)可用于实现将JDWP套接字连接器绑定到所有可用接口的旧行为。这是不安全的,不建议这样做。

答案 1 :(得分:12)

应该是这样的,

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

现在正在使用

答案 2 :(得分:2)

您忘记在-Xdebug命令行上指定java

编辑:在

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

答案 3 :(得分:0)

去构建> Clean Project为我解决了这个问题。如果不能解决问题,您可能还想尝试重新启动计算机

Screenshot

答案 4 :(得分:0)

它对我有帮助,至少在 Intellij IDEA 中是这样:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0.0.0.0:5005

尝试添加 ip 0.0.0.0