繁体   English   中英

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

[英]IntelliJ IDEA 13 debugger don't stop on breakpoint in java for maven project

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

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

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

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

  2. 远程调试 - 我在控制台中以调试模式运行 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

在这两种情况下,调试器只打印“Connected to the target VM, address: 'localhost:8000', transport: 'socket'”

我也试过File > Invalidate Caches / Restart和 clean build,但断点仍然被忽略。

配置:

Ubuntu 13.10
IntelliJ IDEA Ultimate 版本 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早在 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"

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

马文

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

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

不会直接传递给 Maven JVM,而是会传递给exec.args ,该exec.args将由exec: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"

智能创意

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明


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

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

在此处输入图片说明

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

exec目标将在单独的进程中执行您的程序,因此调试器可能没有连接到正确的 JVM。 而是尝试使用java目标,例如:

mvnDebug install exec:java 

这将在同一进程中执行您的程序,并希望您能达到断点。

要使用 Intellij 社区版在 Maven 项目中调试 Web 应用程序,您可以像这样向 WAR pom 添加一个 tomcat 或 jetty 插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <configuration>
                <port>8080</port>
                <path>/yourapp</path>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
        </plugin>
    </plugins>
</build>

如果需要,可以像这样添加数据库驱动程序:

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <dependencies>
        <dependency>
           ... your database driver groupId and artifactId ...
        </dependency>
    </dependencies>
</plugin>

然后使用这些插件可以在命令行中启动应用程序(从 pom 目录):

mvnDebug clean install tomcat7:run-war

或码头:

mvnDebug clean install jetty:run-war

通过命令行以调试模式运行应用程序(您不需要从 Intellij 运行它),执行类似于您发布的内容的远程调试配置,并应命中断点。

如果您使用 Intellij Ultimate Edition,那么这不是必需的,因为您可以为 Tomcat 或任何其他服务器创建服务器配置,并以完全集成的方式部署应用程序,调试和热部署透明处理。

30 天的试用期,您可以在其中评估此功能和其他功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM