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

Posted

技术标签:

【中文标题】在 Eclipse 中使用 ANT 脚本时如何调试 Java 代码【英文标题】:How to debug Java code when using ANT script in Eclipse 【发布时间】:2011-01-25 07:06:55 【问题描述】:

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

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

..........

</javac>

但是当我在 foo.java 类中的一行中放置断点并运行 ant 脚本(运行部分,右键单击运行-->Debug As-->Ant Build)时,Eclipse 不会停止在那行代码。

我错过了什么?!

【问题讨论】:

【参考方案1】:

&lt;java&gt; ant 任务中你应该添加两个jvm参数(&lt;jvmarg&gt;IIRC)来开启调试:

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

这将在调试打开的情况下启动 java 程序,并且程序将准备好接受端口 5432 上的调试器连接。然后您应该使用 IDE 的远程调试工具并将其定向到端口 5432。

【讨论】:

根据设置断点的位置,您可能需要在命令行参数中设置“suspend=y”——JVM 将阻止启动,直到您连接调试器。 另外,ant 脚本不需要在调试模式下启动...事实上,如果它们( 任务和启动 ant 的 java 进程)具有相同的端口 java 任务不会启动。 在我添加 之前它对我不起作用。此外,-Xdebug 和 -Xrunjdwp:transport 都应该定义为单独的 jvm 参数。 这里有一个很好的教程asjava.com/ant/…【参考方案2】:

(无法对给定答案发表评论,因此必须做出另一个答案)

我意识到从 Eclipse 启动 Ant 时,您必须将 fork="true" 添加到 &lt;java&gt; 任务。另外,我首先不清楚如何编写嵌套的 jvmargs,所以这里举个例子:

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

【讨论】:

如果我尝试调试自定义 ant 任务该怎么办? 这对我没有帮助。调试指针即将到达 ant 脚本中的断点,而不是 Java 文件。 如果我使用 taskdef 运行课程会怎样?【参考方案3】:

这是为了帮助那些想知道如何调试使用 ant 构建和部署的 Web 应用程序的人。这在遗留应用程序中非常常见。如果项目以“Dynamic Web Project”作为开始,则不需要执行以下步骤甚至 Ant。

在代码中设置断点。

Window -> Show View -> Others -> Servers

例如添加您的服务器 JBoss 或 Tomcat。

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

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

【讨论】:

【参考方案4】:

This is how I got it working for me(仅供参考)。

提前链接转储:


调试 ant 任务并不像普通的老式 java 调试那么简单。 虽然您可以调试添加断点的 Ant 文件,但在 特定自定义任务的代码将要求您添加远程调试器 为了能够“捕捉”正在运行的进程。

我将解释如何在 Eclipse 中执行此操作,尽管我认为它可能是 使用所有主要的 Java IDE 实现。首先是创建一个新的运行 您计划在其中使用自定义的 ant 文件的配置 新任务。为此,请访问:

运行 -> 外部工具 -> 外部工具配置...

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

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

如果您想知道这些参数的含义,请检查一下,虽然有点 更新 (Java 1.5) 仍然有效。

完成此操作后,您必须为 远程 Java 应用程序。为此,请导航至:

运行->调试配置

在左列下拉列表,在Remote Java中右击 应用程序-> 新建。在项目字段中选择项目名称。 只要您使用相同的主机和端口的默认值 用于 Ant 配置(JVM 参数)。

一切准备就绪,可以试运行了!在任何地方添加断点 认为有必要。就我而言,我在 ant 脚本中都添加了一个 使用自定义 ant 任务以及在自定义 ant 任务中,在 执行方法。

右键单击您的 ant 脚本或任务 -> Debug As...-> Ant >Build 首先

现在在调用您的自定义 ant 任务代码之前,转到 Run-> Debug 配置和调试您之前创建的 Java Remote 应用程序配置。这将启动一个单独的线程来调试 您的自定义 ant 任务代码,前提是您包含一些断点 :) 您可以在下图中看到在我的情况下,线程如何停止 在我的自定义蚂蚁任务的执行方法中。 在此之后,由您决定下一步该做什么......

【讨论】:

您可能会考虑在这里发布整个答案:meta.***.com/tags/link-only-answers/info【参考方案5】:
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

【讨论】:

【参考方案6】:

在 Eclipse 中:

Toolbar &gt; External Tool Configurations... &gt; (select your existing ANT build or create new) &gt; JRE tab

“VM 参数” 中添加:

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

再次Toolbar &gt; Debug &gt; Debug Configurations... &gt; Remote Java Application &gt; New

Name: Debug Ant
Project: <Select your project where debug files are kept>
Host: localhost
Port: 8787

现在在“External Tool Configurations”中启动“ANT Task”(等待远程 Java 应用程序调试器连接),然后启动“Debug Ant”来自“Debug”工具栏图标。

【讨论】:

【参考方案7】:

步骤:

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

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

在批处理文件中你应该保留这一行:

设置 JPDA_ADDRESS=8000

设置 JPDA_TRANSPORT=dt_socket

catalina.bat jpda 开始

之后,在您的 java 代码中保留一个断点,然后调试这个远程调试器。它会起作用的。

编码愉快!!

【讨论】:

【参考方案8】:

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

    将以下行放入 ANT 文件中

    进入调试配置->远程java应用->新建配置文件,项目名,port=5432,host为localhost,保存。

    现在使用调试模式运行您的 build.xml,然后您应该会在控制台中看到“正在侦听地址 5432 的传输 dt_socket”

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

希望这会有所帮助。

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

谢谢

【讨论】:

以上是关于在 Eclipse 中使用 ANT 脚本时如何调试 Java 代码的主要内容,如果未能解决你的问题,请参考以下文章

在IntelliJ中调试Ant项目时,行号信息不可用错误

在 Eclipse 中禁用 Ant 脚本的 DTD 警告?

eclipse:如何将 Java 程序作为 .jar 文件进行调试?

eclipse中的ant junit构建错误

Tomcat攻略之如何在Eclipse中运行,编译,debugger-Tomcat源代码

如何在 Eclipse 中启动 gdb 调试之前运行 linux 脚本