我正在尝试将我的调试器连接到在Open JDK 11上运行的Wildlfy.
尽管Wildfly说:
Listening for transport dt_socket at address: 8787
我的IDE(IntelliJ IDEA CE 2018.1)声称它没有任何连接:
Unable to open debugger port (localhost:8787): java.io.IOException "handshake failed - connection prematurally closed".
我通过standalone.sh –debug启动Wildfly,产生以下JAVA_OPTS:
-server
-Xms64m
-Xmx512m
-XX:MetaspaceSize=96M
-XX:MaxMetaspaceSize=256m
-Djava.net.preferIPv4Stack=true
-Djboss.modules.system.pkgs=org.jboss.byteman
-Djava.awt.headless=true
-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED
--add-modules=java.se
Java 9/10/11中有什么变化吗?使用Oracle JDK 8时,使用完全相同的设置进行远程调试可以正常工作.
使用telnet我可以确认,端口8787确实无法访问.
阅读@ ehsavoie的评论后更新:运行Wildfly的服务器上的netstat -ln显示:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8787 0.0.0.0:* LISTEN
显然,使用OpenJDK 11,调试端口现在默认绑定到localhost.