如何使用Eclipse调试Spring Boot应用程序?


100

我的Spring Bootwebapp运行正常,我想通过Eclipse对其进行调试。

因此,在启动我的远程Java应用程序调试器时,应该监听哪个端口?我必须设置启用调试的Webapp上的设置吗?


在Linux Mint 18上的STS 3.9.4.RELEASE中,Sarah我必须进入调试透视图来调试Spring Boot应用程序。
TimeTrap

Answers:


167

您为什么不右键单击main()方法并选择"Debug As... Java Application"


没想到。我正在测试一个休息应用程序。启动它,然后用我的浏览器以不同的配置将其命中。
JeffLL 2014年

8
有时可能需要调试在服务器上远程运行的应用程序,而这种情况并不适用。
Cuga 2015年

它对我没有用。“编辑器不包含主要类型”
Raj

我猜你不是“右键单击main()方法”吗?
Dave Syer

4
我的情况是一个不同的情况,“直接运行Main”并没有选择几个spring配置文件,即bootstrap.xml,然后我不得不切换为以maven spring-boot:run的身份运行。但问题在于,即使您正在从Eclipse运行此Maven目标,它也不会对其进行调试。
sanjay patel 2016年

91

Spring Boot Reference中有19.2节,它告诉您如何在启用了远程调试支持的情况下启动应用程序。

$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
   -jar target/myproject-0.0.1-SNAPSHOT.jar

启动应用程序后,只需在“运行/调试”配置中添加该“ 远程Java应用程序 ”配置,选择启动应用程序时定义的端口/地址,然后即可进行调试。


这对我有用。谢谢!Eclipse无法调试我的spring boot项目(继续抱怨找不到Main类)。
user6123723

4
请注意,对于Java 8(我不知道其他版本),运行java -agentlib:jdwp=help状态为“仍然可以使用旧的-Xrunjdwp接口,但在将来的版本中将删除它”。改为使用-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Paul


19

我不需要设置远程调试来使它起作用,我使用了Maven。

  1. 确保已将Maven插件安装到Eclipse中。
  2. 单击运行>运行配置> Maven构建>新的启动配置
    • 基本目录:浏览到项目的根目录
    • 目标:spring-boot::run
  3. 单击“ 应用”,然后单击“运行”

注意 如果您的IDE在进行逐行调试时无法找到项目的源代码,请查看此SO答案以了解如何将源代码手动附加到调试应用程序。

希望这对某人有帮助!


如果使用spring-boot:run运行服务器,则仅按控制台窗口中的红色图标将无法停止它。
Shailesh Pratapwar

我可以这样停止它(可能需要安装netstat,我忘了我是使用二进制文件还是Cygwin附带的,或者现在是部分Windows):netstat -ano | grep“ 9999”-在Windows taskkill / F / PID 36308中返回36308任务ID
Armyofda12mnkeys

19

如何调试远程登台或生产Spring Boot应用程序

服务器端

假设您已成功遵循Spring Boot的指南将Spring Boot应用程序设置为服务。您的应用程序工件位于中/srv/my-app/my-app.war,并带有一个配置文件/srv/my-app/my-app.conf

# This is file my-app.conf
# What can you do in this .conf file? The my-app.war is prepended with a SysV init.d script
# (yes, take a look into the war file with a text editor). As my-app.war is symlinked in the init.d directory, that init.d script
# gets executed. One of its step is actually `source`ing this .conf file. Therefore we can do anything in this .conf file that
# we can also do in a regular shell script.

JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=localhost:8002,server=y,suspend=n"
export SPRING_PROFILES_ACTIVE=staging

当您使用重启Spring Boot应用程序时sudo service my-app restart,位于的日志文件中/var/log/my-app.log应有一行显示Listening for transport dt_socket at address: 8002

客户端(显影机)

打开到服务器的SSH端口转发隧道:ssh -L 8002:localhost:8002 myusername@staging.example.com。保持此SSH会话运行。

在Eclipse中,从工具栏中选择运行 -> 调试配置 ->选择远程Java应用程序 ->单击新建按钮->选择作为连接类型标准(套接字连接),作为主机localhost以及作为端口8002(或任何其他端口)在之前的步骤中配置)。单击“ 应用”,然后单击“ 调试”

Eclipse调试器现在应该连接到远程服务器。切换到Debug透视图应该显示连接的JVM及其线程。断点一旦被远程触发应立即触发。


端口转发和隧道传输是我所缺少的。助教。如果您要调试基于Internet的服务器,那么至关重要,例如在Amazon上。
PaulNUK '18年

14

pom.xml放置命令的位置运行以下命令:

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

然后在端口上使用调试选项启动远程Java应用程序5005


2
这无法等待调试器附加到Spring Boot 2.0.3.RELEASE
Stephane '18

10

我认为最好的解决方案是在pom.xml中添加一个插件,而您无需一直做其他任何事情:

<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=9898
                    </jvmArguments>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

但是随后该命令mvn clean install触发调试器,并且构建挂起。如果仅mvnDebug clean install命令执行此操作,那将很酷。
Stephane '18年

1
@Stephane,此配置可能应该在易于启用的特定配置文件中
davidxxx

4
  • 右键单击您的项目,然后选择“调试为=> Java应用程序或Spring boot App” -capture1- 在此处输入图片说明
  • 如果您希望您的应用程序停在应用程序中的某个位置,请双击左侧,您将获得此截图2。 在此处输入图片说明
  • 然后,当您启动应用程序时,请使用这些箭头继续操作。(捕获3) 在此处输入图片说明

这是标题问题的好答案。但是,描述中有一个更具体且不同的问题,需要不同的答案。
托尔·霍夫登

所以我曾经使用MyEclispe,并且Debug As-> Spring Boot App选项可用并且工作正常。我没有使用Eclipse Oxygen,并且Spring Boot App菜单项不再可用。我需要安装eclipse插件才能获得此功能吗?
科帕切比(Kachopsticks)



2

使用eclipse或任何其他IDE,只需右键单击主spring boot应用程序,然后单击“调试为Java应用程序”


2

这个问题已经回答了,但是我也遇到了调试Springboot + gradle + jHipster的问题,

大多数情况下,Spring引导应用程序可以通过右键单击和调试来进行调试,但是当您使用gradle并进行一些附加的环境参数设置时,就无法直接进行调试。

为了解决这个问题,Eclipse提供了一项附加功能作为“ 远程Java应用程序”

通过使用此功能,您可以调试应用程序。

请按照以下步骤操作:

使用./gradlew bootRun --debug-jvm命令运行gradle应用程序

现在转到eclipse->右键单击项目和Debug configuration->远程Java应用程序。

将主机和端口添加为localhost并将端口添加为5005(gradle调试的默认设置,您可以更改它)

请参阅以获取更多详细信息和步骤。


0

右键单击Spring Boot Applications主类文件 ->选择Debug As选项->选择Java Application

在此处输入图片说明 现在,您可以使用断点来调试应用程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.