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

时间:2017-05-21 12:13:16

标签: java intellij-idea spring-boot

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

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

Maven配置,命令为:spring-boot:run。在发布之前,我构建了项目。

10 个答案:

答案 0 :(得分:31)

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

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

答案 1 :(得分:26)

对我有用的唯一方法是直接从Intellij Idea运行或调试应用程序。只需打开包含

的类
 public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }

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

答案 2 :(得分:13)

报告了此问题here

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

例如

;

spring-boot:run -Dfork=false

注意:这是一种解决方法

答案 3 :(得分:9)

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

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>

答案 4 :(得分:4)

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>

有关弹簧启动项目的远程debuge的更多信息,请阅读this

答案 5 :(得分:2)

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

所以去编辑配置 - &gt;远程 - &gt; +。然后通过intelliJ正常启动您的应用程序。然后切换到新创建的远程配置。不要运行它,请按debug。现在调试器已准备就绪,您可以设置断点,调试器将停止运行。

答案 6 :(得分:2)

不幸的是,所有prevoius答案都不完整。我花了很多时间在IntelliJ中找到正确的远程调试方法,这是完整的解释。

我们假定项目代码在本地计算机(Windows OS)中,并且您已在服务器(或VMWare工作站)的Ubuntu VM上部署了项目。并且这两台机器位于同一网络中(它们可以互相ping通)

首先,使用“运行”>“编辑配置”菜单添加新的“运行/调试”配置,然后单击左上角的+按钮,然后选择“远程”选项。保持配置参数不变,只为新配置定义一个名称。

其次,打开腻子并通过SSH连接到远程服务器。运行以下命令以在腻子终端中向您的项目添加远程调试功能:

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

现在更改到远程服务器上项目的根目录(在同一腻子会话中),并使用您通常使用的命令来运行它(例如下面的示例):

mvn -U clean spring-boot:run

这里是每个人都忽略的最重要的部分:)

右键单击腻子会话窗口的顶部,然后选择“更改设置..”选项。转到左侧选项树中的路径“连接”>“ SSH”>“隧道”。现在添加两个端口转发记录,如下图所示(一个本地,它将本地主机5005端口转发到具有相同端口号的远程服务器IP,另一个远程将远程5005端口转发到本地计算机上的5005端口)< / p>

enter image description here

最后返回IntelliJ,并从运行菜单中选择您之前添加的配置,然后单击“调试”按钮。您的本地IntelliJ IDEA应该现在已连接到项目的远程部署,可以进行调试了!

enter image description here

答案 7 :(得分:1)

在inteliJ goto运行->编辑配置->在'+'上按->选择'应用程序'

填写字段:主类,工作目录,模块的类路径

答案 8 :(得分:0)

  1. 启用应用程序pom.XML上的调试端口 喜欢:

    <plugin> <groupId>org.springframework.boot</groupId> <configuration> <jvmArguments> -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 </jvmArguments> </configuration> </plugin>

  1. 按照Ville Miekk-oja的建议进行
      

    所以去编辑配置->远程-> +。然后开始   通常通过智能应用程序。然后切换到新   创建的远程配置。而不是运行它,请按调试。现在   调试器应已准备就绪,您可以设置断点和调试器   会停在他们身上。

答案 9 :(得分:0)

Spring boot maven plugin (> 2.2.0) forks 应用流程。因此,在调试模式下启动的老式“spring-boot:run”不会在断点处停止。

您有两个选择:

1.直接运行主类 See application configuration

2.远程调试

2.1.将 spring-boot-maven-plugin 配置为 enable remote debug

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <jvmArguments>
                -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=**n**,address=5005
                </jvmArguments>
            </configuration>
        </plugin>
     </plugins>
</build>

2.2.运行服务器 See maven configuration

2.3.运行调试服务器 See remote JVM debug configuration