远程调试Java应用程序

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

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

我在这台Linux机器上为TCP打开了4000端口。 我从Windows XP机器上使用Eclipse,并尝试连接到这个应用程序。 我也打开了Windows的端口。

这两台机器都在局域网上,但我似乎无法将调试器连接到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 Tool接口文档 :

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

脚步:

  1. 如上面的帖子所述,使用调试选项启动远程Java应用程序。
  2. 通过指定主机和端口将Eclipse配置为远程调试。
  3. 在Eclipse中启动远程调试并等待连接成功。
  4. 安装断点和调试。
  5. 如果你想从应用程序的开始调试使用suspend = y,这将保持远程应用程序暂停,直到你从eclipse连接。

有关完整的详细信息,请参阅Java远程调试的分步指南 。

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

请参阅远程调试Java Web应用程序链接。 这里描述了完整的远程调试流程。 希望它会有所帮助。

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

Eclipse设置:

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

  • 名称:GatewayPortalProject
  • 项目:GatewayPortal-portlet
  • 连接类型:插座连接
  • 连接属性:i)localhost ii)8787

对于JBoss:

1.更改vm中的/path/toJboss/jboss-eap-6.1/bin/standalone.conf ,如下所示:取消注释以下行:

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

对于Tomcat:

catalina.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类中设置断点