使用 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
但什么也没发生。
所以这是我的问题:
- 我做的对吗?还是有另一种可能更简单的方法来调试我的客户端?有什么建议吗?
- 如果远程调试没问题。是否可以通过将参数传递给我的服务器来启动远程调试,然后使用
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
启动我的 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
但什么也没发生。
所以这是我的问题:
- 我做的对吗?还是有另一种可能更简单的方法来调试我的客户端?有什么建议吗?
- 如果远程调试没问题。是否可以通过将参数传递给我的服务器来启动远程调试,然后使用
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