5

我正在尝试将我最好的调试器连接到远程 Glassfish 实例(远程我的意思是不在同一台物理机器上运行,不仅不在同一台虚拟机上)。

我的 glassfish 域配置检查了“调试”标志,并且 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 命令行已作为Glassfish 网络调试测试的示例给出,这就是我使用它的原因

另请注意,我正在本地执行此 jdb 调试会话(也就是说,当使用 PuTTy 连接到该机器时,因此在运行 Glassifh 的机器上调用 jdb)。

4

2 回答 2

0

如果您要调试的 JVM 位于远程机器(具有不同 IP 地址的机器)上,则必须在附加选项中包含主机名或 IP 地址。

jdb -attach <hostname-or-address>:<port-number>

jdb 是智能的,但它不会搜索您的网络只是为了找到一个等待 JPDA 客户端的端口。

您可能想查看有关 jdb 的文档

于 2012-05-09T20:23:00.707 回答
0

由于您在同一台机器上,请尝试jdb -attach 9009改用。

如果这不起作用,请查看jdb 文档,因为它使用非常不同的选项来准备 VM 以进行调试。

于 2012-05-09T12:58:50.300 回答