在使用Eclipse中的ANT脚本时,如何调试Java代码

42

我有一个Java类需要进行调试(设置断点并使用F6继续)。我正在使用ANT脚本来初始化、构建、部署和运行代码。我使用的是:

<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="true" debuglevel="lines,vars,source">

..........

</javac>

然而,当我在foo.java类中的某一行设置断点并运行ant脚本(运行部分,在运行上右键单击-->调试为-->Ant Build)时,Eclipse不会停在那行代码。

我漏掉了什么?!

8个回答

52

(无法在给定答案上进行评论,因此必须提供另一个答案)

我发现从Eclipse启动Ant时,您需要将fork="true"添加到<java>任务中。 另外,一开始我并不清楚如何编写嵌套的jvmargs,所以这里有一个示例:

<java classname="..." fork="true">
  <jvmarg value="-Xdebug" />
  <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5432" />
  ...
</java>

如果我尝试调试自定义的Ant任务,该怎么办? - mert inan
它没有帮助我。调试指针在ant脚本中断点处停止,但没有到达Java文件。 - Sudheer Kumar
如果我使用taskdef运行这个类会怎么样? - verystrongjoe

31

<java> ant 任务中,您应该添加两个JVM参数(<jvmarg> IIRC)以打开调试:

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

这将启动Java程序并打开调试模式,程序将准备好在5432端口接受调试器连接。然后,您应该使用IDE的远程调试功能,并将其指向连接到5432端口。


7
根据断点设置的位置,你可能需要在命令行参数中设置"suspend=y" -- JVM会阻塞启动直到连接调试器。 - Phil M
此外,为此ant脚本启动调试模式并非必要... 实际上,如果<java>任务和启动ant的java进程使用相同的端口,则java任务将无法启动。 - saugata
1
直到我添加了<jvmarg value="-Xnoagent"/>和<jvmarg value="-Djava.compiler=NONE"/>,它才对我起作用。同时,-Xdebug和-Xrunjdwp:transport都应该被定义为单独的jvm参数。 - al.
2
这里有一个不错的教程,介绍如何在Ant和Eclipse中进行Java代码远程调试:http://www.asjava.com/ant/ant-how-do-i-remote-debug-java-code-in-ant-and-eclipse/ - Abdu

5
在Eclipse中:
工具栏 > 外部工具配置... > (选择现有的ANT构建或创建新的) > JRE选项卡
在“VM参数”中添加: -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
再次点击: 工具栏 > 调试 > 调试配置... > 远程Java应用程序 > 新建
Name: Debug Ant
Project: <Select your project where debug files are kept>
Host: localhost
Port: 8787

现在在“外部工具配置”中启动“ANT任务”(等待远程Java应用程序调试器连接),然后从“调试”工具栏图标启动“Debug Ant”。

3

这是我参考后成功完成的(仅供以后查阅)。

以下是链接列表:


调试Ant任务并不像简单的Java调试那么容易。 虽然你可以在Ant文件中设置断点进行调试,但要在特定自定义任务的代码中深入挖掘,则需要添加远程调试器才能“捕获”运行进程。

我将解释如何在Eclipse中执行此操作,尽管我认为所有主要的Java IDE都可以实现。首先是为您计划使用自定义任务的Ant文件创建新的运行配置。要这样做,请转到:

Run-> External Tools -> External Tools configuration...

右键单击 Ant Build -> New 选项卡,然后在 Main 选项卡中选择 Buildfile 字段中的Ant脚本。然后转到 JRE 选项卡并插入以下JVM参数:

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

如果您想知道这些参数的含义,请查看此处,尽管它有点过时(Java 1.5),但仍然有效。

完成这个步骤之后,必须为远程Java应用程序创建新的调试配置。要这样做,请导航到:

Run-> Debug configurations

在左侧列中下拉列表,右键单击 Remote Java Application -> New 选项卡。将项目名称选择到 Project 字段中。只要您使用与Ant配置(JVM参数)相同的主机和端口的默认值即可。

一切都准备就绪进行测试运行!在您认为必要的任何地方添加断点。在我的案例中,我在使用自定义ant任务的ant脚本以及在execute方法中的自定义ant任务中都添加了一个断点。

右键单击您的 Ant脚本或任务-> Debug As... -> Ant > Build 执行之前,请转到 Run->Debug Configurations 并调试您预先创建的Java Remote Application config。这将启动一个单独的线程,将调试您的自定义ant任务代码,前提是您包含了一些断点 :)。您可以在以下图片中看到,在我的情况下,线程停在我自定义的ant任务的execute方法中。

从此时起,由您自己决定下一步做什么...


5
你可能需要考虑在这里发布完整的答案,因为这个原因:http://meta.stackoverflow.com/tags/link-only-answers/info - zengr

2
set ANT_OPTS=%ANT_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5432

在Eclipse中

Toolbar >> Run >> Debug Configurations >> + >> 

给出以下数值:

Name: Debug_Ant
Project: active-eclipse-project
Host:localhost
Port:5432

2

这篇文章旨在帮助那些想要调试使用ant构建和部署的Web应用程序的人。这在一些老旧的应用程序中相当常见。如果项目一开始就是作为“动态Web项目”启动,那么下面的步骤甚至Ant都不是必需的。

在你的代码中设置断点。

Window -> Show View -> Others -> Servers

添加您的服务器JBoss或Tomcat等。

右键单击服务器,选择“调试”。

确保在ant构建文件中设置了debug =“true”。


1

步骤:

1)使用本地主机名配置远程Java调试器,端口地址为8000(或者您系统的端口地址)

2)创建一个批处理文件,并将其保存在Tomcat的bin文件夹中(当我们希望在同一系统上远程调试服务器时需要执行此步骤)。

在批处理文件中,您应该保留以下行:

set JPDA_ADDRESS=8000

set JPDA_TRANSPORT=dt_socket

catalina.bat jpda start

之后,在您的Java代码中设置断点,并调试此远程调试器。它会正常工作。

编码愉快!!


0

我也遇到了这个问题,我采取了以下步骤来解决。

  1. 在ANT文件中添加以下行

  2. 进入调试配置->远程Java应用程序->创建新的配置文件,项目名称为port=5432,主机为localhost并保存它。

  3. 现在使用调试模式运行您的build.xml,然后您应该在控制台中看到“Listening for transport dt_socket at address 5432”

  4. 现在运行您配置的调试配置文件。现在您的Selenium代码将使用调试模式运行。

希望这可以帮助您。

如果您仍然遇到问题,请告诉我,我可以帮助您解决。

谢谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接