使用 Eclipse 远程调试 server/client 应用程序

remotely debugging a server/client application with eclipse

启动我的 server/client 我将客户端作为命令行参数传递给服务器,两个进程都已启动。

java -cp bin this.is.an.example.server "java -cp C:\this\is\another\example\bin\client main.Client"

为了轻松调试它,我通过在服务器 运行 配置中添加客户端作为参数来安装 eclipse。有效。不幸的是,这样我只能调试服务器。我无法在 运行 时间内访问客户端,因为它 运行 在另一个进程中。

所以我开始寻找解决方案,并找到了一些这样的教程,例如 tutorial_1

我添加到我的命令行java -cp bin this.is.an.example.server "java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:56111,suspend=y -cp C:\this\is\another\example\bin\client main.Client"

我在 eclipse 中向我的客户添加了一个远程调试配置,就像教程中的图 6 一样。

当我在 eclipse 中调试时它说

Waiting for vm to connect to port 56111

但什么也没发生。

所以这是我的问题:

  1. 我做的对吗?还是有另一种可能更简单的方法来调试我的客户端?有什么建议吗?
  2. 如果远程调试没问题。是否可以通过将参数传递给我的服务器来启动远程调试,然后使用 Process process = Runtime.getRuntime().exec(command);?

刚刚阅读:http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/conninv.html#Transports

In contexts where a client is attaching to a server, socket transport addresses have the format ":" where is the host name and is the socket port number at which it attaches or listens. In contexts where a server is waiting for a client to attach, the address consists of the port number alone (the host name is implicit).

并且:

name: address

required: yes, if server=n no, otherwise

default value: ""

description: Transport address for the connection. If server=n, attempt to attach to debugger application at this address. If server=y, listen for a connection at this address.

根据我对这种调用的理解:

java -cp bin this.is.an.example.server "java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:56111,suspend=y -cp C:\this\is\another\example\bin\client main.Client"

客户端应用程序具有尝试连接到 127.0.0.1:56111 的配置。根据我的理解,您想调试服务器,所以我认为您应该将调用更改为:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=56111,suspend=y -cp bin this.is.an.example.server "java -cp C:\this\is\another\example\bin\client main.Client"

然而,如果客户端应用程序应该监听连接,它应该是这样的:

java -cp bin this.is.an.example.server "java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=56111,suspend=y -cp C:\this\is\another\example\bin\client main.Client"

如果 Java >= 5.0.

,也考虑将 -Xrunjdwp 更改为 -agentlib:jwdp