gpt4 book ai didi

java - IntelliJ IDEA 13 调试器不会在 Maven 项目的 Java 断点处停止

转载 作者:太空狗 更新时间:2023-10-29 22:41:16 25 4
gpt4 key购买 nike

我在 System.out.println("test") 命令所在的行上有一个断点。我相信命令是通过执行到达的,因为我看到了打印的字符串“test”。但是断点被忽略了。

断点始终是一个红色圆圈,没有勾号或叉号。我认为当 IDEA 认为该类未加载时,这是一个问题,而它是,因为命令已执行。

我可以在各种情况下重现它:

  1. 当我按下调试时(使用 maven 配置 install exec:exec -DforkMode=never)

  2. 远程调试 - 我在控制台中以 Debug模式运行 maven 目标:

    mvnDebug install exec:exec -DforkMode=never

    mvnDebug install exec:exec

    IDEA中的远程调试配置:

    • 运行远程 JVM 的参数:
      -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
    • 对于 JDK 1.4.X:
      -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
    • 传输:套接字
    • 调试器模式:附加
    • 主机:本地主机
    • 端口:8000

在这两种情况下,调试器只打印“连接到目标虚拟机,地址:'localhost:8000',传输:'socket'”

我也尝试过 File > Invalidate Caches/Restart和干净的构建,但断点仍然被忽略。

配置:

Ubuntu 13.10
IntelliJ IDEA 终极版本 133.944
Apache maven 3.0.4
Java版本:1.7.0_51,供应商:Oracle Corporation
操作系统名称:“linux”,版本:“3.11.0-17-generic”,arch:“amd64”,系列:“unix”

编辑:pom.xml 的相关部分:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<executable>java</executable>
<arguments>
<argument>-D--secret--.server.configuration=/usr/local/etc</argument>
<argument>-classpath</argument><classpath/>
<argument>com.--secret--.Server</argument>
</arguments>
</configuration>
</plugin>

最佳答案

2021 年更新:

现在,在大多数情况下,调试应该开箱即用。

较新版本的 IntelliJ IDEA(使用 2020.3 测试)现在可以自动检测 maven exec 配置并添加适当的选项以启用调试。参见 IDEA-189973了解更多信息。谢谢@Gili对于opening a ticket for this functionality回到 2018 年。

尽管如此,我下面的原始答案仍然对旧版本的 IntelliJ、远程调试或在使用某些 Maven/Gradle 插件进行调试时有用,这些插件会 fork VM 并需要手动将调试选项传递到下游(相应地调整配置)。


我的解决方案:

考虑到您有一个依赖于系统属性的程序:

package com.mycompany.app;


public class App {

private static final String GREETING = System.getProperty("greeting", "Hi");

public static void main(String[] args) {
int x = 10;
System.out.println(GREETING);
}
}

并且您正在使用 exec:exec 运行它:

mvn exec:exec -Dexec.executable=java "-Dexec.args=-classpath %classpath -Dgreeting=\"Hello\" com.mycompany.app.App"

通过一些“初始魔法”,我们可以调试由 Mavenexec:exec 启动的进程。

maven

更改您的 exec:exec 目标以启用远程调试。我正在使用 suspend=yserver=n,但可以随意配置 JDWP Agent如你所愿:

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

这将不会直接传递给maven JVM,而是传递给exec.argsexec:exec :

mvn exec:exec -Dexec.executable=java "-Dexec.args=-classpath %classpath -agentlib:jdwp=transport=dt_socket,server=n,address=127.0.0.1:8000,suspend=y -Dgreeting=\"Hello\" com.mycompany.app.App"

IntelliJ IDEA

创建一个Remote 配置(我再次使用Listen 策略。您应该相应地调整它):

enter image description here

现在切换您的断点并调试您的远程配置。使用上面的设置,它将等到您的进程开始:

enter image description here

最后运行上面的 exec:exec 行并随意调试您的应用程序:

enter image description here


所以基本上你需要两个“运行/调试”配置才能工作:

  1. 具有系统属性和 JDWP 代理配置的 exec:exec 的 Maven 配置:

enter image description here

  1. 充当客户端的远程配置。

关于java - IntelliJ IDEA 13 调试器不会在 Maven 项目的 Java 断点处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22229088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com