我有一个在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 应用程序。我究竟做错了什么?

有帮助吗?

解决方案

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

其他提示

有关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工具接口文档

  

JVM TI在JDK 5.0引入。 JVM TI替换Java虚拟机探查接口(JVMPI),并且,作为JDK 6的,不再提供的Java虚拟机调试接口(JVMDI)。

脚步:

  1. 使用上面的帖子中所述的调试选项启动远程 java 应用程序。
  2. 通过指定主机和端口配置 Eclipse 以进行远程调试。
  3. 在Eclipse中启动远程调试,等待连接成功。
  4. 设置断点并调试。
  5. 如果您想从应用程序启动时使用 suspend=y 进行调试,这将使远程应用程序保持挂起状态,直到您从 eclipse 连接为止。

Java 远程调试分步指南 了解完整详情。

答案涵盖 Java >= 9:

对于 Java 9+,JVM 选项需要稍作更改,方法是将托管 JVM 的计算机的 IP 地址作为地址前缀,或者只是 *:

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

这是由于中注意到的变化 https://www.oracle.com/technetwork/java/javase/9​​-notes-3745703.html#JDK-8041435.

对于Java < 9,端口号足以连接。

这是您应该如何设置 Eclipse 调试器以进行远程调试:

日食设置:

1.单击运行按钮
2.选择调试配置
3.选择“远程Java应用程序”
4.新配置

  • 姓名 :网关门户项目
  • 项目 :GatewayPortal-portlet
  • 连接类型:插座连接
  • 连接属性:i) 本地主机 ii) 8787

对于 JBoss:

1.改变 /path/toJboss/jboss-eap-6.1/bin/standalone.conf 在你的虚拟机中如下:通过删除 # 取消注释以下行:

JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"

对于雄猫:

卡塔琳娜.bat 文件 :

步骤1:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

第2步:

JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

步骤3:从命令提示符运行 Tomcat,如下所示:

catalina.sh jpda start

然后你需要设置 断点 在您想要调试的 Java 类中。

我想强调的是,的的参数顺序是重要的

有关我java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar命令的打开调试端口

java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000命令的

调试的最佳选择是创建日志并分析日志。但在某些情况下我们需要调试部署在服务器上的Web应用程序。

远程调试 Java Web 应用程序 关联。这里描述了远程调试的完整流程。希望它会有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top