我有一个带有几个不同JVM的复杂应用程序。

JVM 1完成约5分钟的工作,然后启动另一个JVM2进行一些额外的工作。

我想调试JVM2。因此,我在JVM2的启动脚本上打开了一个远程套接字调试器:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
然后像这样设置我的Eclipse远程调试 session :

连接类型:标准(套接字连接),主机:localhost,端口:8000

如果我等待JVM2启动,然后启动调试器,它就可以正常工作。

但是,经过5分钟的等待后,很难真正引起足够的重视来单击调试器。

如果我在打开JVM2之前启动了远程调试器,我会得到

Failed to connect to remote VM. Connection refused.
Connection refused: connect

是否有某种方式可以让远程调试器不断尝试连接?

我尝试使用Eclipse远程调试连接类型:Socket Listen,但这会阻塞端口,并且JVM2在启动时会出现此错误:
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=JVMTI_ERROR_INTERNAL(113)
ERROR: transport error 202: bind failed: Address already in use ["transport.c",L41]
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) ["debugInit.c",L500]
JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initialized

如何让远程调试器一遍又一遍地尝试?

最佳答案

将评论变成后来的人们的答案:

可以在server=n开关中指定-Xrunjdwp并使被调试者作为客户端连接到调试器服务器。

为使此工作有效,应使用eclipse中的“套接字监听”选项来设置调试器配置,如下所示:

然后可以通过以下方式启动客户端:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=n,suspend=n,address=8000 -jar foo.jar

或类似。

10-05 23:09