IntelliJ IDEA 2025.1 Help

检查挂起的程序

在调试器会话 启动后, Debug工具窗口会出现,程序会正常运行,直到发生以下情况之一:

之后,程序将被挂起,允许您检查其当前状态、控制其进一步执行并在运行时测试各种场景。

检查帧

程序的状态由 frames表示。 当程序暂停时,当前的帧堆栈将显示在 选项卡中的 调试 工具窗口内。

调试工具窗口中的 Frames 选项卡

帧对应于活动的方法或函数调用。 它存储了被调用方法或函数的局部变量、其参数以及使表达式求值成为可能的代码上下文。

帧和线程在 Frames 选项卡中被选中

为了更好地理解帧的概念,让我们来看看程序运行时会发生什么。 程序的执行从 main 方法开始,继而调用其他方法。 这些方法中的每一个都可能进行额外的方法调用。 每个方法调用的局部变量和参数集由一个帧来表示。

每次调用 方法 时,都会在栈顶新增一个帧。 当 方法 的执行完成时,相应的帧将从堆栈中移除(最后一个进,最先一个出)。

检查帧有助于您了解为什么特定参数被传递给方法,以及调用者在调用时的状态。

线程状态

Java提供的线程状态用于反映当前线程正在发生的情况:

线程状态

描述

监视器

该线程正在等待 Java 监视器。

未启动

线程尚未启动。

运行中

该线程正在运行。

正在休眠

线程正在休眠,因为 Thread.sleep()JVM_Sleep() 已被调用。

未知

线程状态未知。

等待

线程在调用 Object.wait()JVM_MonitorWait() 后正在等待。

僵停

该线程已完成执行。

线程图标

每个线程旁的图标表示该线程的状态:

图标

描述

当前线程

当前线程处于挂起状态。

运行线程

一个活动线程。

断点处的线程

当前命中断点的线程。

挂起的线程

挂起的线程。 线程在被调试器暂停时会被标记为已挂起。

冻结线程

已冻结的线程。 线程在 手动暂停时会被标记为冻结。

默认情况下,IntelliJ IDEA 会隐藏对应框架和库调用的帧。

显示来自库的帧

  • 要显示隐藏的框架,请按右上角的 显示所有框架 切换按钮 显示库中的帧按钮 ,该按钮位于 框架 面板中。

    Frames 窗格包含 57 个已折叠框架调用以及位于右上角的“显示所有框架”按钮

配置要隐藏的软件包

  1. 前往 设置 Ctrl+Alt+S | 构建、执行、部署 | 调试器 | 单步执行

  2. 请指定您希望隐藏的包 不要进入类

  3. 请确保 使用单步过滤器隐藏堆栈帧 已启用。

复制堆栈到剪贴板

  • 要复制当前线程的调用堆栈,请右键点击 选项卡上的任意位置,然后选择 复制堆栈

导出线程

如果您需要获取包含每个线程状态及其堆栈跟踪的报告,请使用 导出线程 选项。 当您需要以文本格式共享有关线程的信息时,这很有用。

  1. 框架 窗格中的任意位置右键点击,并从菜单中选择 导出线程

    导出线程菜单项
  2. 要将报告保存为文本文件,请在 导出线程 对话框中指定文件路径并点击 保存 ,或点击 复制 将其复制到剪贴板。

    导出预览对话框

检查/更新变量

变量 选项卡显示所选 帧/线程中的变量列表。 检查变量可以帮助您理解程序为何以某种方式运行。

变量选项卡显示当前执行点可见的变量

每个变量左侧的图标表示其类型。

变量类型

图标

描述

static 成员

封闭类的静态成员

一个字段

对象的字段(包括静态和非静态)

包含自引用的字段

包含自引用对象的字段(例如,在字段初始化之前的 cause 中的 Throwable

最终字段

最终字段

静态字段

static 字段

抛出的异常

仅当触发 异常断点时显示的抛出异常

一种方法返回值

一个方法的返回值(仅在启用 显示方法返回值 选项时显示)

一个参数

方法参数

一个枚举常量

枚举常量

一个数组

局部数组

基本类型

本地原始类型

一个观察点

监视和自动变量。

基本类型

局部引用变量

固定字段

如果一个对象有很多字段,您可以将其中一些字段固定,这样它们总是显示在列表的顶部。 此优先级将适用于相应类的所有实例。

  • 变量 窗格中,点击表示变量类型的图标。

    有两个字段被固定,并且带有蓝色标志

当某个字段被固定时,蓝色旗帜 将替换原来的图标。 若要取消固定该字段,请点击此标志。

复制变量

在检查变量时,您可能需要复制变量名称或值以粘贴到其他地方或将其与另一个变量进行 比较

  • 要复制变量的名称,请右键点击变量并选择 复制名称

  • 要复制变量所持有的值,请右键点击变量并选择 复制值 Ctrl+C。 对于 String 以外的类型,将复制 toString 表示形式。

与剪贴板比较变量

将变量值与其他值进行比较,请使用 与剪贴板比较值 选项。 这很有用,例如,当一个变量包含一个长字符串时,您需要将其与另一个长字符串进行比较。

  1. 将您想要比较的内容复制,例如,从一个文本文件中。

  2. 变量 选项卡中,右键点击一个变量并选择 与剪贴板比较值

  3. 查看打开的 差异查看器 中的差异。 如需了解更多关于 差异查看器 的信息,请参阅 比较文件和文件夹

    剪贴板与已选对话框

在专用对话框中查看变量

IntelliJ IDEA 允许您在专用对话框中检查变量。 这在您需要跟踪某个变量(或它所持有引用的对象)并且同时能够在帧和线程之间导航时非常有用。

  • 右键点击变量或监视并选择 检查

    检查对话框

设置变量值

如果您想测试程序在特定数据下的行为或在运行时更改其流程,可以通过更改变量值来实现。

  1. 选择一个变量并按 F2。 或者,从上下文菜单中选择 设置值

  2. 请输入变量的值然后按 Enter

    在变量名称右侧的字段中输入新值

您可以从 变量 窗格导航到声明。

  • 要导航到变量声明的代码位置,请右键点击变量并选择 跳转到源 F4

    跳转到来源将带您到变量声明的位置
  • 要导航到变量类型的类声明,请右键点击该变量,然后选择 跳转到类型源 Shift+F4

    跳转到类型源会带您到变量类型定义的位置
  • 要从堆栈跟踪元素导航到方法体,请点击 导航 堆栈跟踪元素旁边的 变量 面板。

    点击 Navigate 会将您带到对应方法的代码位置

检查传入引用

IntelliJ IDEA 为您提供有关当前存在的对象的信息,这些对象持有 变量 选项卡上对象的引用。 该功能还会检测间接引用,例如匿名类中使用外部变量的情况。

  • 要查看引用对象列表,请在 变量 选项卡上右键点击变量,然后选择 显示引用对象

引用对象对话框

引用对象 ”对话框会打开,允许您检查对所选对象的引用,并追踪引用链到垃圾回收根。

当您需要某种类型的所有现有对象的摘要时,您可以使用 Memory选项卡在 调试 工具窗口中获取。

浏览集合的内容

对于数组和列表,您可以获取分页条目列表以及用于检查单个对象的结构视图。

  1. 变量 视图或编辑器中,点击集合对象附近的 视图

  2. 对于自定义排序或过滤,请使用列标题中的图标和对话框的工具栏。

    工具栏中的“启用本地过滤器”图标
“集合展示”对话框显示列表中的条目

计算表达式

IntelliJ IDEA 允许您在调试会话中评估表达式,以获取有关程序状态的更多详细信息或在运行时测试各种执行场景。

此功能仅在程序在命中断点后暂停(而非 暂停 )时有效。

如果表达式中调用的方法内有断点,它们将被忽略。

在编辑器中评估一个简单表达式

要快速评估表达式,请在编辑器中指向它。 请注意,方法调用无法以这种方式评估。

  1. 指向您要计算的表达式。 表达式的结果显示在工具提示中。

    值提示
  2. 要查看结果对象的子元素,请点击 展开按钮 或按 Ctrl+F1

    结果对象由树表示。 这有助于您查看它们的内部状态

如果您觉得数值工具提示干扰到了您的操作,您可以增加延迟时间或完全禁用它们。 为此,请在 设置 对话框(Ctrl+Alt+S )中,转到 构建、执行、部署 | 调试器 | 数据视图 并根据您的偏好设置 显示值提示值工具提示延迟 选项。

在编辑器中评估复杂表达式

如果您想在代码中评估涉及方法调用的表达式或指示要评估的表达式的特定部分,请使用 对表达式快速求值 选项。

  • 按住 Alt 并点击您想要评估的表达式。

    值工具提示出现
  • 或者,选择表达式,然后按 Ctrl+Alt+F8 或从出现的浮动工具栏中选择 对表达式求值

    浮动工具栏中的 Evaluate Expression 按钮

您可以配置 对表达式快速求值 使其只在选择一段代码时运行(无需使用菜单/快捷键)。 启用此选项时请谨慎操作,因为您可能会意外调用方法。

选中代码时评估表达式

  • 前往 设置 | 构建、执行、部署 | 调试器 | 数据视图 并设置 在代码选择上显示值提示 选项。

对任意表达式求值

评估任意表达式是最灵活的评估选项。 它允许您评估任何自定义代码,只要它在当前帧的上下文中。 使用此功能,您可以评估声明、方法调用、switch 表达式、匿名类、lambda 表达式、循环等。

  1. 要评估任意表达式,请在 对表达式求值 字段中输入它,然后在 变量 窗格中按 Enter

    在变量选项卡中的表达式
  2. 结果显示在下面。 您还可以通过点击表达式字段右侧的 将表达式添加到 watches

    变量选项卡中表达式的结果

如果您想评估长代码块,您可能需要为此使用专用对话框:

在专用对话框中评估表达式

  1. 如果您想从当前在您面前的某个表达式或变量开始(例如,在编辑器或 变量 窗格上),请选择它。

    选择要从中开始的表达式
  2. 前往 运行 | 调试操作 | 计算表达式 Alt+F8 或从上下文菜单中选择 对表达式求值。 快捷键可能在 Ubuntu 上无法使用(为正确操作, 调整快捷键配置)。

  3. 求值 对话框中,修改所选表达式或在 表达式 字段中输入一个新的。 点击 展开 Shift+Enter 以修改多行代码片段。

    表达式输入在 Code Fragment 字段中
  4. 点击 求值Ctrl+Enter 以进入多行模式)。 表达式结果显示在 结果 字段中。

    表达式的结果取自 return 语句。 当没有 return 语句时,结果取自代码的最后一行(甚至不必是表达式:单个字面量也可以)。 当没有有效的行可取值时,结果是 undefined。 如果无法计算指定表达式, 结果 字段将指示原因。

    表达式结果已计算

求值 对话框是非模态的,因此您可以将焦点切换回编辑器以复制其他变量和表达式。 您还可以打开多个 求值 对话框。

查看内联值

IntelliJ IDEA 在变量使用的旁边显示其值。

变量值显示在它们使用的行上

一旦变量值更改,内联视图将会更新为新值并更改其颜色。

变量的内联值随每一步骤而变化

如果一行包含对对象的引用,您可以直接在编辑器中检查其字段。 通过此弹出窗口,您还可以 更改变量值 、创建 自定义类型渲染器以及 添加内联监视

内联调试器提示

默认情况下,内联视图是启用的。 要关闭此功能,请在 设置 对话框(Ctrl+Alt+S )中,转到 构建、执行、部署 | 调试器 | 数据视图 并禁用 内联显示值 选项。

添加内联监视

如果您希望某个表达式的结果显示在特定的行上,您可以为此设置一个内联 watch。 内联监视是持久的,并且在会话重启后仍然保持活动状态。

  1. 点击指向您想跟踪其字段的对象的内联提示。

  2. 在弹出窗口中,选择该字段并点击 添加为内联监视

    添加内联监视选项
  3. 如有需要,微调 watch。 您可以使用任何有效的 Java 表达式作为监视。

    设置内联监视

您在编辑器中设置的内联监视也会显示在 内联监视变量 选项卡中的 调试 工具窗口下。

要删除行内监视,请将鼠标悬停在监视上,然后点击旁边的叉号。

DFA 辅助调试

IntelliJ IDEA 还提供了有关代码后续执行情况的提示。 本分析包括异常、布尔表达式结果和代码路径:

显示未来布尔条件结果的提示
显示将抛出异常的提示

要禁用进一步执行的分析,请转到 构建、执行、部署 | 调试器 | 数据视图 | Java 并清除 基于数据流分析预测条件值和异常 复选框。

可视化 JSON 和 XML

当您展开包含 JSON 或 XML 的 内联值评估字符串表达式时,IntelliJ IDEA 会为您提供数据的结构化和格式化视图。

这使您可以使用编辑器功能,例如 代码折叠扩展或缩小选择 ,以便处理子树并在大型对象中方便地导航。

使用预览弹出窗口中的选项卡在结构化视图和原始视图之间切换:

%alt

监视

如果您想跟踪某个变量或更复杂表达式的结果,请为此变量或表达式设置监视。 当您需要评估列表中未定期显示的变量时,这非常有用。

此功能仅在程序在命中断点后暂停(而非 暂停 )时有效。

在所选帧的上下文中评估 Watches。 监视在上下文之外或编译失败时无法评估。 如果是这种情况,手表将标有错误图标 错误图标

默认情况下,监视会与变量一起显示在 变量 窗格中。 要隐藏/显示 监视 窗格,请使用 分离 watches 选项,该选项位于 布局设置 还原布局按钮 菜单中。

添加监视

根据您想要跟踪的表达式:

  • 对于编辑器中的表达式——选择表达式,然后点击浮动工具栏上出现的 添加到监视 图标 。 或者,将表达式拖动到 变量 选项卡。

    浮动工具栏中的 Add to Watches 按钮
  • 对于当前上下文中的元素——右键点击 变量 选项卡中的变量,然后从菜单中选择 添加到监视

  • 对于任意表达式——在 变量 选项卡的顶部部分输入表达式,然后点击 添加到监视

    变量选项卡中的表达式

如果您只希望在检查特定类型的对象时显示监视,您可以为其设置类级别的监视。

添加类级别的监视

  • 右键点击 变量 窗格中的此类对象,然后选择 新的类级别监视

在您将一个变量/表达式添加到 监视 之后,它会保留在那里,并在每个 步骤中进行评估,为您提供当前上下文中的结果。

“Variables” 选项卡中的表达式结果

编辑监视

  • 右键点击所需的监视器,然后选择 编辑

删除监视

  • 要移除单个监视,请右键点击并选择 移除监视。 或者,选择手表并按 Delete

  • 要移除所有监视,请右键点击 变量/监视 窗格上的任意位置,然后选择 移除所有监视

监视允许执行与变量相同的操作。 例如,您可以 在专用对话框中查看它们 ,或使用它们 导航到源代码

监视是您项目的一部分。 这意味着您可以停止并重新运行调试会话而不会有丢失它们的风险。

暂停和恢复监视

有时,监视可能依赖于本地上下文或涉及大量计算,使其在某些步骤中难以评估。 在这种情况下,您可以暂停监视并按需评估。

  • 要暂停监视,请右键点击它并选择 暂停监视

  • 要恢复监视,请右键点击它并选择 继续监视

  • 要对暂停的监视执行一次性评估,请点击监视附近的 求值

选项卡

在调试过程中,有时标记某些实例以便在任何上下文中轻松识别是很有用的。 对此,您可以添加标签。 一旦附上,标签将伴随对象的整个生命周期。

在变量选项卡上的一个标记实例

在使用条件或表达式的情况下,这尤其有用——您可以通过标签引用该对象,而无需搜索对该对象的引用。

在比较中使用标记对象(评估对话框)

如果您希望跟踪某个实例而不受上下文影响,请为此标签创建一个 watch。 这种类型的观察器,无论当前框架和线程如何,对象总是在手边。

添加选项卡

  1. 变量 选项卡上,右键点击当前引用您想要跟踪的对象的变量或监视。 从菜单中选择 标记对象 F11

  2. 请输入标签名称。 您可以选择显示颜色。 为此,请点击 点击选择颜色 并选择颜色。 完成配置后,点击 OK

    在“选择对象标签”对话框中配置标签名称和颜色

移除标签

  • 右键点击您想要删除的标签,然后从菜单中选择 取消标记对象 F11

执行点

返回当前执行点

检查程序状态涉及在代码中导航,您经常需要返回到程序挂起的位置。

请执行以下操作之一:

  • 在主菜单中,前往 运行(U)| 调试操作|显示执行点

  • 按下 Alt+F10

  • 点击 更多 按钮 工具窗口的单步执行工具栏上的按钮,然后从打开的上下文菜单中选择 显示执行点按钮显示执行点

指示当前执行点的蓝线
最后修改日期: 2025年 4月 24日