我有一个包含几个不同JVM的复杂应用程序。
JVM1完成大约5分钟的工作,然后启动另一个JVM2来做一些额外的工作。
我想调试JVM2。所以我在JVM2的启动脚本上打开了一个远程套接字调试器:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
我将Eclipse远程调试会话设置如下:
连接类型:标准(套接字连接),主机:本地主机,端口: 8000
如果我等待JVM2启动,然后启动调试器,它工作得很好。
然而,在长达5分钟的等待之后,真的很难引起足够的注意来点击调试器。
如果我在JVM2打开之前启动远程调试器...我得到了
Failed to connect to remote VM. Connection refused.
Connection refused: connect有没有办法让远程调试器不断尝试连接?
我尝试使用Eclipse Remote Debug Connection Type: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如何让远程调试器一遍又一遍地尝试?
发布于 2014-08-20 15:18:59
把评论变成对后来来的人的回答:
可以在-Xrunjdwp开关中指定server=n,并让被调试者作为客户端连接到调试器服务器。
要实现这一点,应该使用eclipse中的"Socket Listen“选项来设置调试器配置,如下所示:

然后,可以使用以下命令启动客户端:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=n,suspend=n,address=8000 -jar foo.jar或者类似的。
https://stackoverflow.com/questions/25393488
复制相似问题