调试模式下启用 Java 异常断点

1. 调试模式下 Java 异常断点的选取

1.1 什么是 Java 异常断点?

在调试模式下,IntelliJ IDEA 提供了 Java 异常断点 功能,用于在程序抛出特定异常类型时,自动暂停程序运行并定位异常抛出的代码位置。

1.2 Java异常断点的分类
  • 捕获异常(Caught Exceptions): 如果异常被程序内部(如 try-catch 块或框架机制)捕获并处理,调试器仍会暂停程序运行并显示异常抛出的位置。
  • 未捕获异常(Uncaught Exceptions): 如果异常未被捕获并冒泡到主线程,调试器会暂停程序运行,显示异常未处理的代码位置。

1.3 推荐配置

在调试模式下,为了避免调试器频繁中断在框架内部处理的异常上:

  • 取消勾选 捕获异常(Caught Exceptions),保留 未捕获异常(Uncaught Exceptions)。
  • 这样可以专注于实际可能影响程序运行的异常,而忽略框架内部正常的异常处理逻辑。

2. Spring Boot DevTools 的 SilentExitException

2.1 什么是SilentExitException?

SilentExitException 是 Spring Boot DevTools 提供的一个内部异常,用于实现 热部署(Hot Restart)
它的作用是:

  1. 终止当前线程: 当 Spring Boot 检测到代码或资源文件发生更改时,会抛出 SilentExitException,强制结束当前应用的线程。
  2. 启动新线程: Spring Boot DevTools 的内部机制会捕获该异常,并启动一个新的线程,重新加载应用程序的类和配置。
  3. 清理资源: 抛出 SilentExitException 后,旧的类加载器会被释放,以节省内存资源。
2.2 为什么抛出 SilentExitException?
  • Spring Boot DevTools 为了实现 热部署功能,需要动态重新加载类和配置文件。
  • 直接退出线程(例如 System.exit)可能会完全终止 JVM,这显然不可行。因此,Spring Boot 通过抛出 SilentExitException 实现线程退出,同时由 DevTools 捕获异常并启动新的加载逻辑。
2.3 为什么调试器会暂停在 SilentExitException 上(只勾选未捕获异常)
  • 调试工具(如 IntelliJ IDEA)会暂停程序运行,显示 SilentExitException 抛出的代码位置。
  • SilentExitException 只在开发环境中触发,用于控制热部署流程。异常抛出后会被 Spring Boot 内部捕获,并不会导致程序中断。
  • 即使 Spring Boot 已捕获并处理该异常,调试器仍会识别为 未捕获异常,并误导开发者认为这是程序运行中的错误。

3. Spring Boot DevTools 的核心功能

只在开发环境下使用

spring-boot-devtools 是 Spring Boot 提供的一组开发工具,用于提升开发效率。它通常只在开发环境中使用。

spring-boot-devtools 依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

<optional>true</optional> 标志告诉 Maven:

  • 该依赖只在本地开发中使用,不会传递到依赖它的其他模块(即不会作为传递性依赖)。
  • 例如,如果你的项目被其他项目依赖,这些项目不会自动继承 spring-boot-devtools
核心功能
  • 热部署(Hot Restart)

    • 检测代码或配置文件的更改后,自动重启应用程序。
    • 通过抛出 SilentExitException 来退出旧的应用线程,并启动新线程。
  • 禁用模板缓存

    • 禁用静态资源(如 HTML、CSS)和模板引擎的缓存,使修改内容能够立即生效。
  • LiveReload 支持

    • 自动刷新浏览器页面,显示修改后的内容。
  • 远程调试支持

    • 提供远程调试的能力,用于开发环境中的特定场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值