簡體   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