远程调试 Java 应用程序

新手上路,请多包涵

我有一个在 linux 机器上运行的 java 应用程序。我使用以下命令运行 java 应用程序:

 java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n

我已经在这台 Linux 机器上为 TCP 打开了端口 4000。我在 Windows XP 机器上使用 eclipse 并尝试连接到这个应用程序。我也在windows中打开了端口。

两台机器都在 LAN 上,但我似乎无法将调试器连接到 Java 应用程序。我究竟做错了什么?

原文由 Guru 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 647
2 个回答

编辑: 我注意到有些人在这里剪切和粘贴调用。我最初给出的答案仅与 OP 相关。这是一种更现代的调用方式(包括使用更传统的 8000 端口):

 java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>

原始答案如下。


尝试这个:

 java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp

这里有两点:

  1. runjdwp 选项中没有空格。
  2. 选项在类名之前。类名之后的任何参数都是程序的参数!

原文由 C. K. Young 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于 JDK 1.3 或更早版本:

 -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006

对于 JDK 1.4

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

对于较新的 JDK:

 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006

请根据您的需要更改端口号。

来自 Java 技术说明

从 5.0 开始,-agentlib:jdwp 选项用于加载和指定 JDWP 代理的选项。对于 5.0 之前的版本,使用 -Xdebug 和 -Xrunjdwp 选项(5.0 实现也支持 -Xdebug 和 -Xrunjdwp 选项,但较新的 -agentlib:jdwp 选项更可取,因为 5.0 中的 JDWP 代理使用 JVM TI 接口来VM 而不是旧的 JVMDI 接口)

还有一件事需要注意,来自 JVM Tool interface documentation

JVM TI 是在 JDK 5.0 中引入的。 JVM TI 取代了 Java 虚拟机分析器接口 (JVMPI) 和 Java 虚拟机调试接口 (JVMDI),从 JDK 6 开始,它们不再提供。

原文由 Sairam Krish 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题