【问题标题】:remotely debugging a server/client application with eclipse使用 eclipse 远程调试服务器/客户端应用程序
【发布时间】:2016-10-03 11:59:16
【问题描述】:

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

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 中调试时,它说

等待 vm 连接到端口 56111

但什么也没发生。

所以这是我的问题:

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

【问题讨论】:

  • 客户端和服务器一起启动似乎很尴尬。客户端/服务器架构的整个想法是这两者是相互独立的。所以我会质疑你的第一句话。相反:你启动你的服务器。然后你开始你的客户;并且您将服务器的IP地址和端口号提供给客户端;以便它可以连接到该服务器。当然,对于初始测试,IP 和端口总是相同的,因此在 Eclipse 中为您的客户端设置运行时配置应该很简单。
  • 另外:安装和使用 eclipse 只是为了启动 java 项目听起来像 overkill。您应该从 Eclipse 中完成“所有开发工作”;或者根本不使用它。如果您更关注“我想学习如何在没有 IDE 的情况下做事”……那么您可以编写一些入门启动客户端/服务器的脚本 ....
  • 是的,这确实很尴尬,但我以这种方式继承了它,现在必须找到一种让它工作的方法,......再次。据说它正在/正在工作。我称它为服务器客户端,因为主程序就像一个管理所有“客户端”之间通信的“服务器”,顺便说一句,我没有安装 Eclipse 来启动“服务器/客户端”,但调试它还有一些其他问题
  • 老实说,我一直认为在 address 字段中应该只有端口。在客户端连接到服务器的上下文中,套接字传输地址的格式为“:”,其中 是主机名, 是它连接或侦听的套接字端口号。在服务器等待客户端连接的上下文中,地址仅由端口号组成(主机名是隐含的)。来自:docs.oracle.com/javase/1.5.0/docs/guide/jpda/…
  • 你继承了它。这是否意味着……它现在是你的了吗?这是一个非常基本的问题。你看,如果你现在对这件事负责,你想对从一开始就坏掉的事情负责吗?或者退后一步是否有意义?并在投入更多时间之前解决这些基本问题?也许是,也许不是。只是试图让您意识到自己的真正最重要的优先事项。

标签: java eclipse remote-debugging


【解决方案1】:

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

在客户端连接到服务器的上下文中,套接字传输 地址的格式为“:”,主机在哪里 name 并且是它附加的套接字端口号,或者 听。在服务器等待客户端附加的上下文中, 地址仅由端口号组成(主机名是 隐式)。

还有:

姓名:地址

必需:是,如果 server=n 否,否则

默认值: ""

描述:传输地址 联系。如果 server=n,尝试附加到调试器应用程序 这个地址。如果 server=y,则侦听此地址的连接。

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

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2010-09-07
    相关资源
    最近更新 更多