Spring 引导中嵌入 tomcat 的远程调试或本地调试

Remote debug or local debug with tomcat embedded in Spring boot

我正在开发一个新项目,该项目嵌入了一个 tomcat 和依赖项 spring-boot-starter-tomcat:2.5.3(到 vaadin-spring-引导启动器)。 我正在将我的项目构建到 .jar 中,并使用“mvn spring-boot:运行”启动它。

但是由于内嵌tomcat,我无法在Eclipse中使用调试模式。

我已经尝试启动远程调试会话:

MAVEN_OPTS= -Xmx1024M -XX:MaxPermSize=256M -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

Eclipse 连接良好,但断点不起作用,它只显示一个线程,没有任何更多信息。

那么,你知道我怎样才能让它发挥作用吗? 感谢您的宝贵时间!

当 运行ning 应用程序使用 mvn spring-boot:run 时,您可以像这样附加调试器:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:8000"

通过提供spring-boot.run.jvmArguments系统属性。

或者,您可以先构建应用程序,然后 运行 使用以下命令构建应用程序:

java -jar app.jar -Dagentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000

当您使用 MAVEN_OPTS 提供调试器配置时,调试器附加到 Maven 进程,但是,应用程序 运行 在单独的 Java 进程中运行,没有附加调试器.

从 IDE 调试 Spring 引导应用程序的最简单方法是根本不使用 Maven,而是直接从 @SpringBootApplication 启动 main 方法class.

作为第三种解决方案,我在 Eclipse Marketplace 上安装了 Spring Tools 4。 它使我能够在调试模式下启动 @SpringBootApplication,如 Leif Astrand 所说,但带有 IHM(引导仪表板)。

此处描述了另一种解决方案: https://vaadin.com/forum/thread/17519592/debug-with-intellij 该解决方案还帮助我解决了连接远程调试器但未达到断点的问题(请参阅我上面的评论)。

您可以将 JVM arg 添加到插件的配置参数中,如下所示:

     <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <!-- my edits start -->
        <configuration>
            <jvmArguments>
                -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
            </jvmArguments>
        </configuration>
        <!-- my edits end -->
    </plugin>