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>
我正在开发一个新项目,该项目嵌入了一个 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>