Eclipse + Spring Boot中“ throw new SilentExitException()”处的断点


80

每当我在Eclipse IDE(Spring Tool Suite)中以调试模式运行Spring Boot项目时,throw new SilentExitException();即使没有断点,线程也会在行处停止。

是否有解决方案来避免这种行为?

org.springframework.boot.devtools.restart.SilentExitExceptionHandler.exitCurrentThread() (line 53):

public static void exitCurrentThread() {
    throw new SilentExitException();
}

在升级到1.3.0里程碑后,这种情况开始发生。

弹簧工具套件

Version: 3.7.0.RELEASE
Build Id: 201506290649

平台:

Eclipse Luna SR2 (4.4.2)

2
对于登陆此处的IntelliJ用户:在Run | 查看断点... | 任何例外:return !(this instanceof org.springframework.boot.devtools.restart.SilentExitExceptionHandler.SilentExitException);即使您使用另一种JVM语言进行开发,也必须是Java。
马可·埃克斯坦

Answers:


125

不幸的是,这是新spring-boot-devtools模块的已知问题(请参阅https://github.com/spring-projects/spring-boot/issues/3100)。我们使用此技巧杀死主线程,以便可以用可重新加载的版本替换它。到目前为止,我还没有找到阻止调试断点触发的方法。

现在,您可以在Java->调试偏好设置中切换“在未捕获的异常上暂停执行”复选框,以防止发生这种情况。


6
不幸的是,这个问题仍然存在。
Stefan Falk,2017年

1
此问题仍然存在。
nabster

1
仍然存在:p
Sachin Sharma

2
此问题仍然存在。使用Eclipse版本:2019-06(4.12.0)和spring-boot 2.0.6。窗口->首选项-。> Java-> Debig->未选中“在未捕获的异常上暂停执行”
src3369

在Eclipse版本2020-03(4.15.0)和spring-boot 2.3.1中仍然存在
HDJEMAI

10

由于Eclipse on Debug模式已经允许有限的热修补,因此我发现重新加载器在大多数情况下会适得其反,因此我决定通过以下方式禁用它:

System.setProperty("spring.devtools.restart.enabled", "false");

参考:https : //docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html#using-boot-devtools-restart-disable

由于该异常是由重新加载程序引发的,因此这也解决了此问题。请注意,您必须使用System.setProperty方法而不是在中进行设置application.properties


7

在以下配置中将属性添加为VM参数:

在此处输入图片说明

这样,您无需更改代码,就像使用以下情况一样:

System.setProperty("spring.devtools.restart.enabled", "false");

除了其他选择,我使用了这个。非常感谢您度过了愉快的一天!
sivakadi

2

我的解决方法:

public static void main(String[] args) {
    try {
        SpringApplication.run(App.class, args);
    } catch (Throwable e) {
        if(e.getClass().getName().contains("SilentExitException")) {
            LOGGER.debug("Spring is restarting the main thread - See spring-boot-devtools");
        } else {
            LOGGER.error("Application crashed!", e);
        }
    }
}

不必理会,SilentExitException因为devtools只是使用SilentExitException不是很安静的a重新启动实例。这个try块会使它静音...

我必须在课程上使用文字匹配功能,因为中的SilentExitException是私有的SilentExitExceptionHandler

它不能解决您的断点问题...


1

尝试在范围运行时运行devtools:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>
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.