在 STS (Eclipse) 中调试 Spring 代码

Debugging Spring Code in STS (Eclipse)

我习惯在 Netbeans 中工作,在那里我可以在调试模式下启动一个项目,更改一些代码,然后点击 "Apply Code changes" 按钮。

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

我发现 This article 这表明如果设置了 Project -> Build automatically,Eclipse 会自动执行此操作,但这不是我的经验。 (关于 Spring 引导项目,这是我目前正在使用的项目)

非常感谢任何帮助。

在 Eclipse 中并结合 Spring Boot Devtools,您有两种选择来处理这种情况。

如果 JVM swap-in 代码的能力在您调试时发生变化而不丢失应用程序的状态。当您启用 "Build Automatically" 并在遇到断点后更改代码时,这在 Eclipse out-of-the-box 中有效。通常 JVM 会丢弃当前执行帧并在当前方法调用开始时继续执行。

但是:这仅适用于较小的代码更改(例如更改方法的实现)。 JVM 无法 hot-swapped 对源代码进行大多数更改。如果 IDE 尝试这样做,您将收到一条错误消息,表明这是不可能的,并询问您是要重新启动 JVM、停止它还是在不更改代码的情况下继续。这是 JVM 的限制,而不是 IDE.

的直接限制

另一种选择是使用 Spring Boot Devtools。一旦它们位于应用程序的 class 路径上并且您在项目的 class 路径上更改了 class(如果启用了 "Build Automatically",则会自动发生), Boot Devtools 将检测到这些更改并 re-start 自动启动应用程序。这不会导致 JVM 重新启动,只是它的启动应用程序部分。因此它比启动完整的 JVM 快得多。但是:您正在失去应用程序的状态。从调试的角度来看,这与重启应用程序一样,只是速度更快。但是当你坐在断点上并期望应用程序继续使用相同的堆栈框架时,你不能做什么。

还有其他工具,如 JRebel,允许将更复杂的代码更改 hot-swapped 到 运行 应用程序中,例如,还有用于 Eclipse 的插件来使用 JRebel,但那是另一个故事。