# Spring 调试器

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com.cn/help/idea/llms.txt).

IntelliJ IDEA 可帮助处理许多 Spring 特定的设计时问题。 不过，其中一些问题可能需要运行时调查。 在这种情况下，IntelliJ IDEA 的调试器会识别 Spring 上下文，并提供用于检查以调试模式运行的 Spring 应用程序并与之交互的工具。

> **Tip:**
> 本主题仅介绍 Spring 调试器特有的功能 有关与框架无关的调试器功能的更多信息，请参阅 [调试器](debugging-code.html) 部分。

Procedure: 安装 Spring 调试器插件

此功能性依赖于 Spring 调试器插件，需要安装并启用该插件。

> **Note:**
> 如果没有 Ultimate 订阅，IntelliJ IDEA 中无法使用 Spring 调试器插件。

1. 按 `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS)) 打开设置，然后选择  `插件` 。

2. 找到  Spring 调试器  插件，然后点击   安装  。 如果出现提示，请重启 IDE。

Spring 调试器支持以下 [运行配置](run-debug-configuration.html) 类型：

* [Spring Boot](run-debug-configuration-spring-boot.html)

* [JUnit](run-debug-configuration-junit.html)

* [TestNG](run-debug-configuration-testng.html)

* [Maven](run-debug-configuration-maven.html)

* [Gradle](gradle.html)

* [远程 JVM 调试](attach-to-process.html)

## 检查当前配置

在  `.properties`  中定义的属性通常会在运行时被覆盖，覆盖源可能是另一个  `.properties`  文件或某个 Bean。 如果运行时的实际值与  `.properties`  文件中指定的值不同，则相应行会显示一个 [内联提示](inlay-hints.html)，以揭示实际的配置值。

![重写的属性值显示在 application.properties 文件中](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-properties.png)

如果属性在多个上下文中定义，嵌入提示会显示多个定义。

Procedure: 导航到属性重定义

* 要查看哪一段代码重写了属性值，请点击显示实际值的嵌入提示。 重写代码会在编辑器中打开。

![嵌入提示显示属性的实际值](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-property-inlay.png)

## 数据库连接

在调试模式下运行 Spring 应用时，IntelliJ IDEA 会在   数据库   工具窗口中显示当前的数据库连接。

除其他场景外，在处理以下内容时，这可能很有用：

* [Testcontainers](https://docs.spring.io/spring-boot/reference/testing/testcontainers.html)

* 尚未在 IntelliJ IDEA 中设置的 [数据源](managing-data-sources.html)

* 大量数据库，例如在微服务场景中

* 编排工具，例如 [Docker Compose](docker-compose.html)

![Database 工具窗口显示一个在随机端口上运行的数据库](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-database.png)

Procedure:

1. 在 [调试模式](starting-the-debugger-session.html) 下运行 Spring 应用。

2. 打开 [数据库](database-tool-window.html) 工具窗口。

3. 点击   刷新   按钮。

在已发现的数据库中，您可以查看表、直接执行 SQL 查询、浏览架构等，其方式与使用任何其他 [数据源](managing-data-sources.html) 相同。

![编辑器选项卡中的数据库表内容](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-database-1.png)

> **Tip:**
> 有关在 IntelliJ IDEA 中使用数据库的更多信息，请参阅 [数据库工具与 SQL](quick-start-with-database-functionality.html) 部分。

## 调试器表达式中的 Spring 上下文

在 IntelliJ IDEA 的调试器中对表达式求值时，可以访问所有属性和 bean，无论它们是否存在于当前执行上下文中。 这样可以执行任何 bean 的方法来检索数据并验证假设。

### 在编辑器中计算表达式／添加监视

Procedure:

* 按住 `Alt` (Windows), `Alt` (macOS), `Alt` (IntelliJ IDEA Classic (macOS)), `Alt` (macOS System Shortcuts), `Alt` (XWin), `Alt` (GNOME), `Alt` (KDE), `Alt` (Emacs), `Alt` (Sublime Text), `Alt` (Sublime Text (macOS)), `Alt` (Visual Studio), `Alt` (Visual Studio (macOS)), `Alt` (NetBeans), `Alt` (Eclipse), `Alt` (Eclipse (macOS))并点击您想要评估的表达式。

![显示 bean 详细信息的弹出窗口](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-evaluate-in-editor.png)

* 或者，选择表达式，然后按 `Ctrl+Alt+F8` (Windows), `⌘ ⌥ F8` (macOS), `⌘ ⌥ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ F8` (macOS System Shortcuts), `Ctrl+Alt+8` (XWin), `Ctrl+Alt+8` (GNOME), `Ctrl+Alt+8` (KDE), `Ctrl+Alt+F8` (Emacs), `Ctrl+Alt+F8` (Sublime Text), `⌘ ⌥ F8` (Sublime Text (macOS)), `Ctrl+Alt+F8` (Visual Studio), `⌘ ⌥ F8` (Visual Studio (macOS)), `Ctrl+Alt+F8` (NetBeans), `Ctrl+Alt+F8` (Eclipse), `⌘ ⌥ F8` (Eclipse (macOS))或从出现的浮动工具栏中选择   计算表达式  。

![带有"表达式求值"按钮的浮动工具栏](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-evaluate-in-editor-2.png)

您可以通过点击工具栏中的 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.debugger.addToWatch.svg) 将该表达式添加到监视。

> **Tip:**
> 使用 [代码补全](auto-completing-code.html) 在表达式中插入符号。 这有助于避免错误并更快地编写表达式。
>
>
>
> ![弹出窗口显示可用于补全表达式的符号](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-expression-completion.png)

### 对任意表达式求值 / 添加监视

Procedure:

* 要计算任意表达式，请在   变量   选项卡中的   计算表达式   字段中输入它，然后按 `Enter` (Windows), `⏎` (macOS), `⏎` (IntelliJ IDEA Classic (macOS)), `⏎` (macOS System Shortcuts), `Enter` (XWin), `Enter` (GNOME), `Enter` (KDE), `Enter` (Emacs), `Enter` (Sublime Text), `⏎` (Sublime Text (macOS)), `Enter` (Visual Studio), `⏎` (Visual Studio (macOS)), `Enter` (NetBeans), `Enter` (Eclipse), `⏎` (Eclipse (macOS))。

![Variables 选项卡中的表达式](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-evaluate.png)

结果显示在下面。 您还可以通过点击表达式字段右侧的 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.debugger.addToWatch.svg) 来 [将表达式添加到 watches](null)。

![Variables 选项卡中表达式的结果](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-evaluate-result.png)

要在单独的对话框中查看集合视图，请点击靠近   结果   行的   探索元素  。 此视图会对结果分页，并允许搜索结果以及对结果应用筛选器。

!["集合呈现"对话框显示大型集合的内容](https://resources.jetbrains.com.cn/help/img/idea/2026.3/collection-view.png)

如果表达式的结果是 JSON 或 XML 格式的字符串，可以将其作为结构化文档查看。 这使您可以使用编辑器功能，例如 [代码折叠](https://www.jetbrains.com.cn/guide/java/tips/expand-collapse-code/)和 [扩展或缩小选择](https://www.jetbrains.com.cn/guide/java/tips/extend-selection/)，以便处理子树并在大型对象中方便地导航。

![%alt](https://resources.jetbrains.com.cn/help/img/idea/2026.3/ij-visualize-json.png)

### 对 Spring 属性求值

Procedure:

1. 在表达式字段的右侧，从菜单中选择   Spring 属性  。

2. 输入您要计算的属性，然后按 `Enter` (Windows), `⏎` (macOS), `⏎` (IntelliJ IDEA Classic (macOS)), `⏎` (macOS System Shortcuts), `Enter` (XWin), `Enter` (GNOME), `Enter` (KDE), `Enter` (Emacs), `Enter` (Sublime Text), `⏎` (Sublime Text (macOS)), `Enter` (Visual Studio), `⏎` (Visual Studio (macOS)), `Enter` (NetBeans), `Enter` (Eclipse), `⏎` (Eclipse (macOS))。 属性值和详细信息显示在   结果   节点下。

![Variables 选项卡中的属性值和详细信息](https://resources.jetbrains.com.cn/help/img/idea/2026.3/evaluate-spring-property.png)

如果您想为该属性设置监视，请在表达式字段的右侧点击 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.debugger.addToWatch.svg)。

### 断点中的表达式

与表达式和监视类似，可以在断点中使用表达式。 这样可以添加临时日志记录，并仅在满足条件时挂起应用程序。

Procedure: 设置条件断点

* 右键点击 [断点](using-breakpoints.html)，并在   条件   字段中输入条件。

!["行断点"弹出窗口，在"条件"字段中输入表达式](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-conditional-breakpoint.png)

仅当条件的结果为  `true`  时，断点才会挂起应用程序。

Procedure: 设置日志断点

* 右键点击 [断点](using-breakpoints.html)，点击   更多  ，并在   评估并记录   字段中输入日志表达式。

!["断点"对话框，在"求值并记录"字段中输入表达式](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-logging-breakpoint-properties.png)

断点除了挂起应用程序外，还会将表达式结果日志到控制台。 若只将表达式日志而不挂起应用程序，请取消选中   挂起   复选框。

!["行断点"弹出窗口，在"求值并记录"字段中输入表达式，并取消选中"暂停"复选框](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-logging-breakpoint-no-suspend.png)

有关断点类型和筛选器的信息，请参阅 [断点](using-breakpoints.html) 页面。

## 查看 bean 的运行时信息

可以直接在编辑器中查看 bean 的运行时信息。

Procedure:

1. 在编辑器中，点击已加载 bean 的类定义旁边的装订区域图标（ ![Spring bean](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring.icons.expui.springBean.svg)）。

![已加载 bean 的类定义旁边的装订区域图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/bean-icon-in-gutter.png)

2. 在出现的菜单中，选择   显示运行时信息  。

![点击已加载 bean 的类定义旁边的装订区域图标后出现的菜单中的'显示运行时信息'选项](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-show-runtime-info.png)

会出现包含以下信息的弹出窗口：

* 已注入到 – 当前注入了此 bean 的其他 bean

* 依赖于 – 注入到此 bean 中的其他 bean；与 已注入到 相反。

![包含 bean 运行时信息的弹出窗口](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-runtime-info-for-bean.png)

还可以在编辑器中以嵌入提示的形式查看运行时信息，而无需挂起应用程序。 对于每个已 inject 的 bean，嵌入提示会显示当前被 inject 的是哪个实现，以及作用域、上下文和配置文件等附加信息。

![运行时 bean 嵌入提示](https://resources.jetbrains.com.cn/help/img/idea/2026.3/runtime_bean_inlay_hint.png)

要了解已 inject 的 bean 来自何处，请点击嵌入提示，IntelliJ IDEA 会导航到 bean 定义。

## 调试事务

如果当前调试的操作发生在 JPA 事务内，可以直接在调试器中查看会话上下文，包括事务的隔离级别、传播状态和缓存内容。

Procedure: 查看事务详细信息

1. 在事务内执行的某一行挂起应用程序。

![应用已在标记为 @Transactional 的方法中的某一行挂起](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-transactional.png)

2. 打开   调试   工具窗口并切换到   变量   选项卡。 事务详细信息显示在   事务   节点下。

![Variables 选项卡中的事务详细信息](https://resources.jetbrains.com.cn/help/img/idea/2026.3/transaction-in-variable.png)

在事务中时，还可以导航到代码中启动该事务的位置。

Procedure: 导航到事务源

* 在   变量   选项卡中，点击   导航到源代码

![Threads 与 Variables 标签页中的"导航到源"按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/transaction-navigate-to-source.png)

对于事务中包含的 JPA 实体，可以在   调试   工具窗口的   变量   选项卡中以及代码中的实体提及位置附近查看其当前状态：

![实体状态显示在编辑器中实体用法附近](https://resources.jetbrains.com.cn/help/img/idea/2026.3/transaction-entity-state.png)

## 查看已加载的 bean

以调试模式运行 Spring 应用程序时，   项目   工具窗口会从 Spring 的角度指示每个 bean 的运行时状态：

![Project 工具窗口中的 bean 类具有不同图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/project-view-beans-status.png)

图标颜色指示以下状态：

* 绿色 – 已加载

* 透明 – 未加载

* 黄色 – 已模拟

此外，bean 可以具有以下图标之一：

* ![Spring Java bean](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring.icons.expui.gutter.springJavaBean%4014x14.svg)：自动发现带有 `@Component` 注解的 bean 以及带有 `@Bean` 注解的方法。

* ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring.icons.expui.springBeanFactory.svg)：配置 bean（使用 `@Configuration` 或其他隐式包含 `@Configuration` 的注释进行注释）。

* ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring.icons.expui.repositoryBean.svg)：存储库 bean（带有 `@Repository` 注解或扩展 `org.springframework.data.repository.Repository` 接口）。

* ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring.icons.expui.gutter.requestMapping%4014x14.svg)：控制器（使用 `@Controller` 和 `@RestController` 注解的类）。

* ![Spring bean](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring.icons.expui.implicitBean.svg)：隐式 bean，即由 Spring 添加的未明确定义的服务 bean。

* ![Spring 抽象 beans](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring.icons.expui.abstractBean.svg)：抽象 XML beans（在 XML 文件中用 `abstract="true"` 属性定义）。

* ![Spring 抽象 beans](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring.icons.expui.gutter.infrastructureBean%4014x14.svg)：基础设施 bean，也就是在与配置和常规基础设施支持相关的 XML 文件中定义的 bean，如 ViewResolver 或带有 `context:component-scan` 的 bean。

* ![Spring 原型 bean](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring.icons.expui.prototypeBean.svg)：具有 prototype 范围的 beans（在 XML 文件中使用 `scope="prototype"` 定义）。

* ![Spring bean](https://resources.jetbrains.com.cn/help/img/idea/2026.3/调试配置](run-debug-configuration.html) 禁用 Spring 调试器功能。

Procedure:

* 在运行/调试配置的设置中，点击   修改选项  ，然后选择   禁用 Spring 调试器  。

![运行配置设置中的"修改选项"按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/spring-debugger-modify-options.png)

## 调试远程 Spring 应用程序

Spring 调试器还支持调试在以下嵌入式容器中运行的远程 Spring 应用程序：

* Tomcat

* Jetty

* Undertow

> **Note:**
> 在远程调试的情况下，Spring 调试器不会显示数据库结构视图。

### 容器之间的区别

由于受支持容器中的线程模型不同，Spring 调试器传送上下文时可能会有延迟：

* Tomcat – 上下文立即可用

* Jetty – 上下文在短暂延迟后可用（等待第一个 HTTP 请求）

* Undertow – 上下文在短暂延迟后可用（等待第一个 HTTP 请求）

Procedure: 使用调试代理运行 Spring 应用程序

* 使用会附加调试代理的虚拟机选项启动 Spring 应用程序。

在 Docker Compose 配置中通过  `JAVA_TOOL_OPTIONS`  提供 VM 选项的示例：

```YAML
http-server:
    depends_on:
        - postgresql
    image: 'jb/http-server:latest'
    environment:
        - SPRING_DATASOURCE_URL=jdbc:postgresql://postgresql:5432/db
        - SPRING_DATASOURCE_USERNAME=user
        - SPRING_DATASOURCE_PASSWORD=secret
        - JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
    ports:
        - '8080:8080'
        - '5005:5005'  # Map debug port 5005 to host port 5005

```

> **Note:**
> 确保调试端口已按上面的示例正确公开。

有关 VM 选项的更多信息，请参阅 [调试代理](attach-to-process.html#debug-agent)

Procedure: 创建运行/调试配置

1. 前往  `运行 | 编辑配置` 。 或者，按 `Alt+Shift+F10` (Windows), `⌃ ⌥ R` (macOS), `⌥ ⇧ F10` (IntelliJ IDEA Classic (macOS)), `⌃ ⌥ R` (macOS System Shortcuts), `Alt+Shift+F10` (XWin), `Alt+Shift+F10` (GNOME), `Alt+Shift+F10` (KDE), `Alt+Shift+F10` (Emacs), `Alt+Shift+F10` (Sublime Text), `⌃ ⌥ R` (Sublime Text (macOS)), `Ctrl+Alt+Shift+R` (Visual Studio), `⌘ ⌥ ⇧ R` (Visual Studio (macOS)), `Alt+Shift+F10` (NetBeans), `Alt+Shift+F10` (Eclipse), `⌃ ⌥ R` (Eclipse (macOS))，然后按 `0` (Windows), `0` (macOS), `0` (IntelliJ IDEA Classic (macOS)), `0` (macOS System Shortcuts), `0` (XWin), `0` (GNOME), `0` (KDE), `0` (Emacs), `0` (Sublime Text), `0` (Sublime Text (macOS)), `0` (Visual Studio), `0` (Visual Studio (macOS)), `0` (NetBeans), `0` (Eclipse), `0` (Eclipse (macOS))。

2. 在 [运行/调试配置](run-debug-configurations-dialog.html)对话框中，点击 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.expui.general.add.svg)工具栏上的按钮或按下 `Alt+Insert` (Windows), `⌘ N` (macOS), `⌃ N` (IntelliJ IDEA Classic (macOS)), `⌘ N` (macOS System Shortcuts), `Alt+Insert` (XWin), `Alt+Insert` (GNOME), `Alt+Insert` (KDE), `Alt+Insert` (Emacs), `Ctrl+N` (Sublime Text), `⌘ N` (Sublime Text (macOS)), `Ctrl+N` (Visual Studio), `⌘ N` (Visual Studio (macOS)), `Alt+Insert` (NetBeans), `Alt+Insert` (Eclipse), `⌘ N` (Eclipse (macOS))。 选择   远程 JVM 调试   从列表中。

3. 在   调试器模式   指定调试器是应连接到远程 JVM 还是监听传入的连接。

> **Note:**
> 确保所选的   调试器模式   与远程 JVM 的 VM 选项一致。 例如，如果远程 JVM 正在监听（扮演服务器），调试器必须附加（扮演客户端）。

如果您选择   侦听远程 JVM  ，请指定在远程 JVM 断开连接后是否要自动重新启动调试器。 这样，调试器将随时准备处理传入的连接。

4. （适用于 Windows）可选择指定所需的 [传输方式](https://docs.oracle.com/javase/7/docs/technotes/guides/jpda/conninv.html#Transports)。 IntelliJ IDEA 会自动选择适当的传输方式，因此除非您对通信方法有特殊要求，否则无需配置。

5. 指定远程 JVM 的主机和端口。 支持 IPv4 和 IPv6。 请确保端口指定正确、未被占用且未被防火墙阻止。

6. 指定查找源代码的模块。 IntelliJ IDEA 将首先检查选定的模块，然后是其他模块（如果有的话）。 源使用完全限定类名进行匹配。 如果完全限定名称没有匹配项，IntelliJ IDEA 会尝试通过文件名查找匹配项。

7. 可选：配置日志。 有关日志设置，请参阅 [日志](setting-log-options.html)。

8. 如果您尚未为调试对象 JVM 配置调试代理，您可以从   远程 JVM 的命令行参数   字段中复制所需的 VM option。

![debug-agent-option.png](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug-agent-option.png)

Procedure: 开始运行/调试配置

1. 请确保主机应用程序正在运行，并以添加调试代理的 [VM option](#debug-agent) 启动。

2. [启动](starting-the-debugger-session.html)运行/调试配置 [您之前创建的](#create-rc)。

![debug_select_rc.png](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_select_rc.png)

