Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Windows计算机在Linux上调试远程WildFly_Java_Wildfly_Remote Debugging_Jdb_Adoptopenjdk - Fatal编程技术网

Java 从Windows计算机在Linux上调试远程WildFly

Java 从Windows计算机在Linux上调试远程WildFly,java,wildfly,remote-debugging,jdb,adoptopenjdk,Java,Wildfly,Remote Debugging,Jdb,Adoptopenjdk,更新 我在Linux(RedHat 7.9)服务器上调试远程WildFly应用程序时遇到问题。我的IDE Intellij Idea 2020.1在Windows 10下工作 在Linux服务器上: openjdk版本“1.8.0_282” OpenJDK运行时环境(build 1.8.0_282-b08) OpenJDK 64位服务器虚拟机(构建25.282-b08,混合模式) 在Windows客户端计算机上: openjdk版本“1.8.0_282” OpenJDK运行时环境(采用OpenJ

更新

我在Linux(RedHat 7.9)服务器上调试远程WildFly应用程序时遇到问题。我的IDE Intellij Idea 2020.1在Windows 10下工作

在Linux服务器上:

openjdk版本“1.8.0_282”
OpenJDK运行时环境(build 1.8.0_282-b08)
OpenJDK 64位服务器虚拟机(构建25.282-b08,混合模式)

在Windows客户端计算机上:

openjdk版本“1.8.0_282”
OpenJDK运行时环境(采用OpenJDK)(构建1.8.0_282-b08)
OpenJDK 64位服务器虚拟机(采用OpenJDK)(构建25.282-b08,混合模式)

我使用--debug选项启动WildFly。它强制jvm使用以下选项启动WF:

-agentlib:jdwp=transport=dt_socket,地址=8787,服务器=y,挂起=n“

然后我看到调试端口8787正常并侦听:

netstat-ln|grep87
tcp 0.0.0.0:8787 0.0.0.0:*听

我可以使用jdb从其他Linux服务器连接到这台机器,一切正常:

jdb-附件10.20.20.40:8787
正在初始化jdb

但是,当我尝试使用Idea从我的Windows工作站连接到调试端口时,连接失败。 在服务器上使用netstat时,我看到调试端口正在侦听我的客户端计算机。因此,尝试从Win连接到Linux调试端口会导致客户端连接失败。但服务器端端口仍保持连接。我必须重新启动WildFly以再次打开调试端口

当我尝试从windows机器使用jdb进行连接时,也会发生同样的情况

在这里,共享内存传输根本不起作用

jdb-附件10.20.20.40:8787
java.io.IOException:shmemBase\u attach失败:系统找不到指定的文件 位于com.sun.tools.jdi.SharedMemoryTransportService.attach0(本机方法) 位于com.sun.tools.jdi.SharedMemoryTransportService.attach(SharedMemoryTransportService.java:108) 位于com.sun.tools.jdi.genericatachingconnector.attach(genericatachingconnector.java:116) 在com.sun.tools.jdi.SharedMemoryAttachingConnector.attach上(SharedMemoryAttachingConnector.java:63) 位于com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519) 位于com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328) 位于com.sun.tools.example.debug.tty.Env.init(Env.java:63) 位于com.sun.tools.example.debug.tty.tty.main(tty.java:1083)
致命错误: 无法连接到目标VM

所以我们应该尝试使用套接字

jdb-connect com.sun.jdi.SocketAttach:hostname=10.20.20.40,port=8787

现在一切看起来都很好

linux服务器上的Netstat显示已设置状态:

sudo netstat-nlp-a|grep 8787
tcp 0 644 10.20.20.40:8787 10.20.30.51:5344已建立15480/java

同时在win客户端上,我看到已建立连接:

netstat-a | findstr 5344
TCP 10.20.30.51:5344 10.20.20.40:8787已建立

等待几秒钟,然后:

内部异常: com.sun.jdi.VMDisconnectedException 在com.sun.tools.jdi.TargetVM.waitForReply上(TargetVM.java:307) 位于com.sun.tools.jdi.VirtualMachineImpl.waitForTargetReply(VirtualMachineImpl.java:1030) 位于com.sun.tools.jdi.PacketStream.waitForReply(PacketStream.java:69) 位于com.sun.tools.jdi.JDWP$EventRequest$Set.waitForReply(JDWP.java:6910) 位于com.sun.tools.jdi.JDWP$EventRequest$Set.process(JDWP.java:6875) 位于com.sun.tools.jdi.EventRequestManagerImpl$EventRequestImpl.set(EventRequestManagerImpl.java:201) 位于com.sun.tools.jdi.EventRequestManagerImpl$EventRequestImpl.setEnabled(EventRequestManagerImpl.java:166) 在com.sun.tools.jdi.EventRequestManagerImpl$EventRequestImpl.enable上(EventRequestManagerImpl.java:151) 位于com.sun.tools.example.debug.tty.EventRequestSpec.Resolvely(EventRequestSpec.java:139) 在com.sun.tools.example.debug.tty.EventRequestSpecList.AddagerLyresolve(EventRequestSpecList.java:98)上 位于com.sun.tools.example.debug.tty.Commands.resolveNow(Commands.java:1125) 位于com.sun.tools.example.debug.tty.Commands.commandCatchException(Commands.java:810) 位于com.sun.tools.example.debug.tty.VMConnection.setEventRequests(VMConnection.java:427) 位于com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:337) 位于com.sun.tools.example.debug.tty.Env.init(Env.java:63) 位于com.sun.tools.example.debug.tty.tty.main(tty.java:1083)

服务器端口状态保持建立状态,直到服务重新启动:

sudo netstat-nlp-a|grep 8787
tcp 0 644 10.20.20.40:8787 10.20.30.51:5344已建立15480/java

但是客户端断开了连接

netstat-a | findstr 5344

那么,使用Windows IDE在Linux上调试wildfly或java有可能吗?
为什么客户端调试会话在尝试连接后会关闭?
jdb套接字是否有一些超时设置