将多个调试器连接到debugee(Java,JPDA)

时间:2010-10-19 22:20:48

标签: java eclipse debugging

我一直试图将两个客户端调试器连接到 JPDA上下文中的Debuggee程序。这是可能的吗? 是否有解决方案来实现它?

我使用eclipse作为IDE(编辑拼写错误)。 将服务器程序视为Hello World 打印出来:

System.out.println("I have the String"); //1
System.out.println("You will have to pass through the breakpoints before you shall see");
System.out.println("breakpoints");
System.out.println("before you shall see"); //4

我们可以在第1行和第4行放置断点。

第1步: params在运行配置中传递给程序:

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

server=y告诉vm表现得像服务器一样,suspend=y意味着prog执行将暂停,直到调试器锁定它为止) 并运行程序。

第2步:转到Debug as , Debug config ,Remote Java application和 创建一个新实例:

Project: Same as before
Connection type: Socket Attach(Socket Attach)
Host:LocalHost
Port:8000

现在,当我调试Prog执行时,在指定的断点处停止。 我无法做的是创建这个远程调试器的另一个实例 可以锁定到服务器(prog 1),当我这样做时,我得到连接被拒绝。让我知道是否有其他人遇到过这个问题 如果存在变通方法。 谢谢!

由于

3 个答案:

答案 0 :(得分:1)

AFAIK在任何给定时间内只能有一个调试器实例连接到java程序。一旦开始编程调试,Eclipse就会连接到调试程序,阻止所有其他连接尝试。如果要远程连接,可以不在调试模式下运行程序并添加参数: -Xdebug -Xrunjdwp:transport = dt_socket,address = 8000,server = y,suspend = y 手动java参数,那么你应该能够与另一个调试器连接。

答案 1 :(得分:0)

它在服务器共享环境中很有用。假设您正在开发一个庞大的服务器应用程序,并且只有一个测试服务器。所有开发人员都部署到同一个共享服务器在这种情况下,拥有多个调试连接是合理的。

这在利用OSGI的服务器应用程序中尤其有用。每个开发人员都可以编写,部署,停止,启动和调试不同的模块。

答案 2 :(得分:0)

我不知道2010年情况如何,但2014年这是可行的。我正在调试一个applet和一个servlet,尽管他们使用不同的JVM,这样做只需在eclipse中启动你的远程调试过程就像套接字一样,启动第一个java应用程序:

-Xdebug -Xrunjdwp:transport = dt_socket,address = 127.0.0.1:8787,suspend = y

然后启动相同的eclipse远程调试过程并使用相同的选项启动另一个java进程,您应该看到这样的进程生成:

debug in eclipse

你可以在同一个端口看到两个不同的JVM监听(永远不要告诉'applet'进程的名称)