我在 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/