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

时间:2014-08-19 21:44:34

标签: 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

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

我尝试使用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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

Eclipse debugger configuration

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

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

或类似。