在 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】:在<java>
ant 任务中你应该添加两个jvm参数(<jvmarg>
IIRC)来开启调试:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5432
这将在调试打开的情况下启动 java 程序,并且程序将准备好接受端口 5432 上的调试器连接。然后您应该使用 IDE 的远程调试工具并将其定向到端口 5432。
【讨论】:
根据设置断点的位置,您可能需要在命令行参数中设置“suspend=y”——JVM 将阻止启动,直到您连接调试器。 另外,ant 脚本不需要在调试模式下启动...事实上,如果它们((无法对给定答案发表评论,因此必须做出另一个答案)
我意识到从 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 任务该怎么办? 这对我没有帮助。调试指针即将到达 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 > External Tool Configurations... > (select your existing ANT build or create new) > JRE tab
在“VM 参数” 中添加:
-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
再次Toolbar > Debug > Debug Configurations... > Remote Java Application > 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 代码的主要内容,如果未能解决你的问题,请参考以下文章
eclipse:如何将 Java 程序作为 .jar 文件进行调试?