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

标签 java intellij-idea spring-boot

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

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

Maven 配置命令为:spring-boot:run。在启动之前,我会构建项目。

最佳答案

tldr:您可以尝试像这样调整命令行:

spring-boot:run -Dspring-boot.run.fork=false

解释:

在 Debug模式下运行应用程序时,IntelliJ 调试器附加到它自己启动的 Java 进程(通过将适当的参数,-agentlib:jdwp 等附加到 Java 命令行)。

通常,这些 Java 进程可能会派生一个新实例,该实例没有获取相同的参数,并且由于它位于单独的进程中,因此未连接到调试器。这可能会令人困惑。

spring-boot:run Maven 目标,除了 fork 一个新的 JVM 之外,还会造成更多的困惑,因为它有时会 fork,有时不会,这取决于它获得的选项,除其他事项外。其中一些可以在 documentation 中找到。 ,但并不总是很明显。

您应该首先检查 Java 进程是否实际上正在被调试。当您从 IntelliJ 启动应用程序时,您将在 Run/Debug 选项卡中看到消息滚动。在顶部,有正在执行的命令行。它应该包含调试器参数(-agentlib:jdwp 等),并且后面应该有一条消息说“已连接到目标 VM”,这是调试器确认它已联系。

接下来,如果您不确定 JVM 是否已 fork ,您可以检查操作系统中的进程列表,例如在 MacOS 和 *nix 下,您可以使用 ps aux | grep java。 Java 进程通常有一个巨大的参数列表,其中大部分是类路径。正在运行的实际应用程序位于命令行的最后。如果 JVM 是 fork 的,那么您有一个运行 Maven 目标的进程,另一个运行 Spring 应用程序。然后您的调试器将连接到您感兴趣的进程,并且您的断点将不起作用。

要阻止 spring-boot:run fork ,可以使用上面的 fork 参数。

关于java - 如何使用 IntelliJ IDEA 社区版调试 spring-boot 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44096708/

相关文章:

java - 如何在合并到 GIT 存储库之前运行本地 Sonar 检查?

java - 平面文本文件解析

ide - 从 JDK 中删除 jar 以便仅显示我实际使用的包的代码完成?

java - Intellij IDEA 无法导入 Gradle 项目 - "Could not initialize class javax.crypto.SunJCE_b"

spring 日志记录忽略作为 jvm 参数传递的 log4j2 配置文件

java - 找不到注释处理器 'org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor'

java - ADT 升级后,Google map View 不再加载;明显的身份验证问题?

java - JEdi​​torPane 和字体比例

android - 如何在 Android Studio 中查找 Strings.xml 的用法?

spring-boot - 在 Spring Security 中使用 HttpSecurity 和 AuthenticationManagerBuilder 注册身份验证提供程序有什么区别?