远程调试 Java 应用程序

2022-08-31 05:15:01

我有一个在Linux机器上运行的Java应用程序。我使用以下方法运行java应用程序:

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

我已经在此Linux计算机上为TCP打开了端口4000。我使用Windows XP机器上的eclipse并尝试连接到此应用程序。我也在窗户上打开了端口。

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


答案 1

编辑:我注意到有些人正在剪切和粘贴这里的调用。我最初给出的答案只与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. 选项位于类名之前。类名后面的任何参数都是程序的参数!

答案 2

对于 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 接口而不是较旧的 JVMDI 接口)

还有一点需要注意,来自 JVM 工具接口文档

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