我有一个复杂的应用程序,有几个不同的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
如何让远程调试器一遍又一遍地尝试?
答案 0 :(得分:7)
将评论转化为后来的人们的回答:
可以在server=n
开关中指定-Xrunjdwp
,并将debugee作为客户端连接到调试器服务器。
为了使这个工作,调试器配置应该在eclipse中使用“Socket Listen”选项进行设置,如下所示:
然后可以通过以下方式启动客户端:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=n,suspend=n,address=8000 -jar foo.jar
或类似。