我正在尝试将我最好的调试器连接到远程Glassfish实例(通过远程我的意思是不在相同的物理机器上运行,而不是在同一个VM中运行)。
我的glassfish域配置已选中“debug”标志,并且启动期间server.log报告
-Xdebug
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9009
这表明(在我看来),确实启用了调试。
但是,当我尝试连接调试器时,它会失败。以下会话是一个示例(使用PuTTy完成):
$ jdb -connect com.sun.jdi.SocketAttach:port=9009
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)
at java.net.Socket.connect(Socket.java:529)
at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:204)
at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:98)
at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:72)
at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:358)
at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:168)
at com.sun.tools.example.debug.tty.Env.init(Env.java:64)
at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1010)
Fatal error:
Unable to attach to target VM.
什么可能导致这种行为?
修改
请注意,此jdb命令行已作为example of Glassfish debug testing on the web给出,这就是我使用它的原因
另请注意,我正在本地执行此jdb调试会话(也就是说当使用PuTTy连接到该计算机时,因此在运行的Glassifh机器上调用jdb)。
答案 0 :(得分:0)
由于您在同一台计算机上,请尝试使用jdb -attach 9009
。
如果这不起作用,请查看jdb documentation,因为它使用的非常不同 准备VM进行调试的选项。
答案 1 :(得分:0)
如果要调试的JVM位于远程计算机(具有不同IP地址的计算机)上,则必须包含主机名或IP地址作为附加选项的一部分。
jdb -attach <hostname-or-address>:<port-number>
jdb很聪明,但它不会只搜索您的网络以找到等待JPDA客户端的端口。
您可能需要查看此document about jdb。