在STS中调试Spring代码(Eclipse)

时间:2018-02-22 13:56:20

标签: eclipse debugging spring-tool-suite

我习惯在Netbeans工作,在那里我可以在调试模式下启动项目,更改一些代码,然后点击“应用代码更改”按钮。

目前我在Eclipse(Spring Tools Suite)工作,我想做类似的事情。

我发现This article表明Eclipse会自动执行,如果Project - >自动构建已设置,但这不是我的经验。 (关于Spring Boot项目,这是我目前正在使用的)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在Eclipse中,结合Spring Boot Devtools,您有两种方法可以解决这种情况。

如果在调试时JVM交换代码的能力发生变化,而不会丢失应用程序的状态,那么就是一个。当你启用“自动构建”并在点击断点后进行代码更改时,这可以在Eclipse中开箱即用。通常,JVM会删除当前执行帧,并在当前方法调用的开头继续执行。

但是:这仅适用于次要代码更改(例如,更改方法的实现)。 JVM无法热插拔源代码的大多数更改。如果IDE尝试这样做,您将收到一条错误消息,指出您是否要重新启动JVM,停止它或在没有代码更改的情况下继续执行此操作是不可能的。这是JVM的限制,而不是IDE的限制。

另一个选择是使用Spring Boot Devtools。一旦它们位于应用程序的类路径中并且您在项目的类路径上更改了一个类(如果您启用了“自动构建”,则会自动执行该类),Boot Devtools将检测这些更改并自动重新启动引导应用程序。这不会导致JVM重新启动,只是它的启动应用程序部分。因此,它比启动完整的JVM快得多。但是:你正在失去应用程序的状态。从调试的角度来看,它就像你重新启动应用程序一样,它只是更快。但是你坐在断点上并期望应用程序继续使用相同的堆栈框架时,你无法做到这一点。

还有其他工具,比如JRebel,可以将更复杂的代码更改热交换到正在运行的应用程序中,还有Eclipse的插件可以使用JRebel,但这是另一个故事。