我有一个带有几个不同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
或类似。