如何使用IntelliJ IDEA社区版调试spring-boot应用程序?

Vil*_*oja 36 java intellij-idea spring-boot

我在IntelliJ IDEA社区版上调试Java spring-boot应用程序时遇到了困难.主要问题是IDE不会在断点上停止,即使程序肯定通过它执行.如何让IntelliJ IDEA在断点处停止?

作为附加信息,这是我的运行配置:

使用以下命令进行Maven配置:spring-boot:run.在发布之前,我构建了项目.

sti*_*ger 43

唯一适用于我的方法是直接从Intellij Idea运行或调试应用程序.只需打开包含的类

 public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
Run Code Online (Sandbox Code Playgroud)

然后单击鼠标右键 - >调试我的应用程序

  • 查看 IntelliJ 的控制台并了解它实际在做什么以及为什么它与附加调试器启动应用程序的其他方法不同会很有趣。 (2认同)
  • Idea 将其自己的调试配置添加到 JVM 并在任意端口上开始调试,而不是使用您预先定义的调试属性。 (2认同)

pip*_*nom 42

对我来说,这些步骤有效:

  1. 选择菜单运行 - >编辑配置...
  2. 创建新的远程配置.默认情况下,您无需更改设置:
    -agentlib:jdwp = transport = dt_socket,server = y,suspend = n,address = 5005.但是,如果您希望在连接之前暂停JVM,则可以更改suspend = y.或者你可以chage port等.
  3. 根据JVM版本复制命令行并保存配置.
  4. 在终端窗口中运行您的应用程序(在Maven使用案例和JVM 1.5及更高版本中)mvn clean spring-boot:run -Drun.jvmArguments =" - agentlib:jdwp = transport = dt_socket,server = y,suspend = n,address = 5005"
  5. 通过运行在步骤2中创建的远程配置连接到您的应用.现在您可以调试您的应用.

  • 如果有人使用复制粘贴:`-Drun:jvmArguments =`应该是`-Drun.jvmArguments =`(点而不是冒号) (5认同)
  • 我实际上需要将其添加到 pom.xml 中,因为 spring-boot 忽略了 -Drun... 参数: `<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin </artifactId> <版本>2.0.3.RELEASE</版本> <配置> <jvmArguments>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005</jvmArguments> </配置> </插件>` (2认同)

Abd*_*rsu 17

这个问题在这里报道

你可以通过发送fork = false参数到maven目标来解决它.

例如;

spring-boot:run -Dspring-boot.run.fork=false
Run Code Online (Sandbox Code Playgroud)

注意:这是一种解决方法

  • 这为我解决了这个问题。我尝试了“JAVA_OPTS”和“Drun.jvmArguments”,但没有成功。 (2认同)

Bur*_*ton 9

我发现在我的构建中包含Spring Dev Tools导致IntelliJ调试中断(根据上面的描述).如果您不使用此功能,则只需将其从构建中删除即可.

如果使用Maven,则应从您的pom.xml中删除以下行.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)


Vil*_*oja 7

我让它工作的唯一方法是创建一个单独的远程调试配置。

所以去编辑配置->远程->+。然后通过intelliJ正常启动您的应用程序。然后切换到新创建的远程配置。而不是运行它,按调试。现在调试器应该准备好了,你可以设置断点,调试器会停止。

编辑:对我来说,调试端口已经启用,但我发现并不是每个人都这样。如果你得到这样的错误

'Unable to open debugger port (localhost:5005): java.net.ConnectException "Connection refused: connect"
Run Code Online (Sandbox Code Playgroud)

然后你需要在你的应用程序的 pom.xml 上启用端口。复制自@Gianluca Musa 回答:

<plugin>
<groupId>org.springframework.boot</groupId>
<configuration>
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
</jvmArguments>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

感谢@Gianluca Musa 在他的回答中指出这一点

  • `无法打开调试器端口(本地主机:5005):java.net.ConnectException“连接被拒绝:连接”` (7认同)
  • 优秀的解决方案;也适用于我的设置:IntelliJ 2018.2,Maven 3.5.4 来调试 spring-boot 1.3.6 应用程序(Java 8)。荣誉。 (2认同)
  • 奇迹般有效。注意,还需要添加`&lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;`,否则会失败,并提示“artifactId of a plugin must be Defined”。 (2认同)

Alb*_*mer 6

您可以在 IntelliJ 社区版中使用此解决方法,通过标准模块(通过 mvn spring-boot:run)调试 java 应用程序,而无需在 intelliJ 配置中创建专用的调试侦听器(它将动态创建):

\n

在maven菜单中(默认位于屏幕右侧),单击“执行maven目标”按钮:

\n

单击箭头所指的按钮

\n

然后输入这个目标: mvn spring-boot:run -Dspring-boot.run.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5000"\n(您可能想要更改 intelliJ 的调试器和您的应用程序之间的协调端口)

\n

这将启动您的 Spring boot 应用程序,但它将挂起。在run下面的菜单中,您将看到一个按钮Attach debugger

\n

单击图像底部箭头指向的按钮

\n

单击它,然后 voil\xc3\xa0:您的 spring-boot 应用程序将运行并且断点将命中。

\n

注意:@stinger 提供的解决方案仅适用于 IntelliJ Idea Ultimate Edition,它不适用于 IntelliJ Community Edition,这是问题中提出的,但我还没有足够的声誉来添加评论他的回答。如果您使用终极版,@stinger \ 的解决方案仍然是首选

\n


Kai*_*Kai 5

piphonom 的 anwser 很好,但你需要做更多的事情,就是像这样将 jvmArguments 添加到 maven 插件中

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>
            -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
        </jvmArguments>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

有关 Spring Boot 项目远程调试的更多信息,请阅读本文