如何让Eclipse Remote Debugger继续监听端口,直到JVM最终连接?

Nic*_*zza 8 java eclipse debugging

我有一个复杂的应用程序与几个不同的JVM.

JVM 1执行大约5分钟的工作,然后触发另一个JVM2来完成一些额外的工作.

我想调试JVM2.所以我在JVM2的启动脚本上打开一个远程套接字调试器:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

我设置了这样的Eclipse远程调试会话:

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

如果我等待JVM2启动,然后启动调试器,它工作正常.

然而,经过5分钟的等待后,点击调试器真的很难得到足够的重视.

如果我在JVM2打开之前启动远程调试器......我明白了

Failed to connect to remote VM. Connection refused.
Connection refused: connect
Run Code Online (Sandbox Code Playgroud)

有没有让远程调试器连续尝试连接?

我尝试使用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
Run Code Online (Sandbox Code Playgroud)

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

msa*_*ord 8

将评论转化为后来的人们的回答:

可以server=n-Xrunjdwp交换机中指定并将debugee作为客户端连接到调试器服务器.

为了使这项工作,调试器配置应该在eclipse中使用"Socket Listen"选项进行设置,如下所示:

Eclipse调试器配置

然后可以启动客户端:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=n,suspend=n,address=8000 -jar foo.jar
Run Code Online (Sandbox Code Playgroud)

或类似的.

  • 从@Nicholas添加被拒绝的编辑作为注释,因为它似乎相关:缺点:如果JVM2被触发,然后终止,然后再次触发,你会收到一个错误,说没有服务器正在侦听端口8000连接至.另一种可能性是将您的应用程序保留为`server = y`,但添加`suspend = y`告诉JVM在启动程序之前等待您以附加模式与Eclipse连接.当第二个JVM最终运行时,它将等待远程调试器在启动之前连接. (3认同)