检查挂起的程序
在调试器会话 启动后, Debug工具窗口会出现,程序会正常运行,直到发生以下情况之一:
触发了一个 breakpoint
您手动 暂停程序
之后,程序将被挂起,允许您检查其当前状态、控制其进一步执行并在运行时测试各种场景。
检查帧
程序的状态由 frames表示。 当程序暂停时,当前的帧堆栈将显示在 帧 选项卡中的 调试 工具窗口内。

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

为了更好地理解帧的概念,让我们来看看程序运行时会发生什么。 程序的执行从 main 方法开始,继而调用其他方法。 这些方法中的每一个都可能进行额外的方法调用。 每个方法调用的局部变量和参数集由一个帧来表示。
每次调用 方法 时,都会在栈顶新增一个帧。 当 方法 的执行完成时,相应的帧将从堆栈中移除(最后一个进,最先一个出)。
检查帧有助于您了解为什么特定参数被传递给方法,以及调用者在调用时的状态。
线程状态
Java提供的线程状态用于反映当前线程正在发生的情况:
线程状态 | 描述 |
|---|---|
监视器 | 该线程正在等待 Java 监视器。 |
未启动 | 线程尚未启动。 |
运行中 | 该线程正在运行。 |
正在休眠 | 线程正在休眠,因为 |
未知 | 线程状态未知。 |
等待 | 线程在调用 |
僵停 | 该线程已完成执行。 |
线程图标
每个线程旁的图标表示该线程的状态:
图标 | 描述 |
|---|---|
当前线程处于挂起状态。 | |
一个活动线程。 | |
当前命中断点的线程。 | |
挂起的线程。 线程在被调试器暂停时会被标记为已挂起。 | |
已冻结的线程。 线程在 手动暂停时会被标记为冻结。 |
默认情况下,IntelliJ IDEA 会隐藏对应框架和库调用的帧。
显示来自库的帧
要显示隐藏的框架,请按右上角的 显示所有框架 切换按钮
,该按钮位于 帧 面板中。

配置要隐藏的软件包
前往 。
请指定您希望隐藏的包 。
请确保 已启用。
复制堆栈到剪贴板
要复制当前线程的调用堆栈,请右键点击 帧 选项卡上的任意位置,然后选择 复制堆栈。
导出线程
如果您需要获取包含每个线程状态及其堆栈跟踪的报告,请使用 导出线程 选项。 当您需要以文本格式共享有关线程的信息时,这很有用。
在 帧 窗格中的任意位置右键点击,并从菜单中选择 导出线程。

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

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

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

当某个字段被固定时,蓝色旗帜 将替换原来的图标。 若要取消固定该字段,请点击此标志。
复制变量
在检查变量时,您可能需要复制变量名称或值以粘贴到其他地方或将其与另一个变量进行 比较。
要复制变量的名称,请右键点击变量并选择 复制名称。
要复制变量所持有的值,请右键点击变量并选择 复制值 Ctrl+C。 对于
String以外的类型,将复制toString表示。
与剪贴板比较变量
将变量值与其他值进行比较,请使用 与剪贴板比较值 选项。 这很有用,例如,当一个变量包含一个长字符串时,您需要将其与另一个长字符串进行比较。
将您想要比较的内容复制,例如,从一个文本文件中。
在 变量 选项卡中,右键点击一个变量并选择 与剪贴板比较值。
在打开的差异查看器中检查差异。 如需了解更多关于 差异查看器 的信息,请参阅 比较文件和文件夹。

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

设置变量值
如果您想测试程序在特定数据下的行为或在运行时更改其流程,可以通过更改变量值来实现。
选择一个变量并按 F2。 或者,从上下文菜单中选择 设置值。
请输入变量的值然后按 Enter。

instance="rm"/>
导航到源代码
您可以从 变量 窗格导航到声明。
要导航到变量声明的代码位置,请右键点击变量并选择 跳转到源 F4。

要导航到变量类型的类声明,请右键点击该变量,然后选择 跳转到类型源 Shift+F4。

要从堆栈跟踪元素导航到方法体,请点击 导航 堆栈跟踪元素旁边的 变量 面板。

检查传入引用
IntelliJ IDEA 为您提供有关当前存在的对象的信息,这些对象持有 变量 选项卡上对象的引用。 该功能还会检测间接引用,例如匿名类中使用外部变量的情况。
要查看引用对象列表,请在 变量 选项卡上右键点击变量,然后选择 显示引用对象。

“ 引用对象 ”对话框会打开,允许您检查对所选对象的引用,并追踪引用链到垃圾回收根。
当您需要某种类型的所有现有对象的摘要时,您可以使用 Memory选项卡在 调试 工具窗口中获取。
浏览集合内容
对于数组和列表,您可以获取分页条目列表以及用于检查单个对象的结构视图。
在 变量 视图或编辑器中,点击集合对象附近的 视图。
对于自定义排序或过滤,请使用列标题和对话框工具栏中的图标。


计算表达式
IntelliJ IDEA 允许您在调试会话中评估表达式,以获取有关程序状态的更多详细信息或在运行时测试各种执行场景。
此功能仅在程序在命中断点后暂停(而非 暂停 )时有效。
如果表达式中调用的方法内有断点,它们将被忽略。
在编辑器中评估一个简单表达式
要快速评估表达式,请在编辑器中指向它。 请注意,方法调用无法以这种方式评估。
指向您要计算的表达式。 表达式的结果显示在工具提示中。

要查看结果对象的子元素,请点击
或按 Ctrl+F1。

如果您觉得数值工具提示干扰到了您的操作,您可以增加延迟时间或完全禁用它们。 为此,请在 设置 对话框(Ctrl+Alt+S )中,转到 并根据您的偏好设置 显示值提示 和 值工具提示延迟 选项。
在编辑器中评估复杂表达式
如果您想在代码中评估涉及方法调用的表达式或指示要评估的表达式的特定部分,请使用 对表达式快速求值 选项。
按住 Alt 并点击您想要评估的表达式。

或者,选择表达式,然后按 Ctrl+Alt+F8 或从出现的浮动工具栏中选择 计算表达式。

您可以配置 对表达式快速求值 使其只在选择一段代码时运行(无需使用菜单/快捷键)。 启用此选项时请谨慎操作,因为您可能会意外调用方法。
选中代码时评估表达式
前往 并设置 在代码选择上显示值提示 选项。
计算任意表达式
评估任意表达式是最灵活的评估选项。 它允许您评估任何自定义代码,只要它在当前帧的上下文中。 使用此功能,您可以评估声明、方法调用、switch 表达式、匿名类、lambda 表达式、循环等。
要评估任意表达式,请在 计算表达式 字段中输入它,然后在 变量 窗格中按 Enter

结果显示在下面。 您还可以通过点击表达式字段右侧的
来 将表达式添加到 watches。

如果您想评估长代码块,您可能需要为此使用专用对话框:
在专用对话框中评估表达式
如果您想从当前在您面前的某个表达式或变量开始(例如,在编辑器或 变量 窗格上),请选择它。

前往 Alt+F8 或从上下文菜单中选择 计算表达式。 快捷键可能在 Ubuntu 上无法使用(为正确操作, 调整快捷键配置)。
在 计算 对话框中,修改所选表达式或在 表达式 字段中输入一个新的。 点击 展开 Shift+Enter 以修改多行代码片段。

点击 计算 (Ctrl+Enter 以进入多行模式)。 表达式结果显示在 结果 字段中。
表达式的结果取自 return 语句。 当没有 return 语句时,结果取自代码的最后一行(甚至不必是表达式:单个字面量也可以)。 当没有有效的行可取值时,结果是
undefined。 如果无法计算指定表达式, 结果 字段将指示原因。
计算 对话框是非模态的,因此您可以将焦点切换回编辑器以复制其他变量和表达式。 您还可以打开多个 计算 对话框。
内联显示值
IntelliJ IDEA 在变量使用的旁边显示其值。

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

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

默认情况下,内联视图是启用的。 要关闭此功能,请在 设置 对话框(Ctrl+Alt+S )中,转到 并禁用 内联显示值 选项。
添加内联监视
如果您希望某个表达式的结果显示在特定的行上,您可以为此设置一个内联 watch。 内联监视是持久的,并且在会话重启后仍然保持活动状态。
点击指向您想跟踪其字段的对象的内联提示。
在弹出窗口中,选择该字段并点击 添加为内联监视。

如有需要,微调 watch。 您可以使用任何有效的 Java 表达式作为监视。

您在编辑器中设置的内联监视也会显示在 内联监视 的 变量 选项卡中的 调试 工具窗口下。
要删除行内监视,请将鼠标悬停在监视上,然后点击旁边的叉号。
DFA 辅助调试
IntelliJ IDEA 还提供了有关代码后续执行情况的提示。 本分析包括异常、布尔表达式结果和代码路径:


要禁用进一步执行的分析,请转到 并清除 基于数据流分析预测条件值和异常 复选框。
可视化 JSON 和 XML
当您展开包含 JSON 或 XML 的 内联值或 评估字符串表达式时,IntelliJ IDEA 会为您提供数据的结构化和格式化视图。
这使您可以使用编辑器功能,例如 代码折叠和 扩展或缩小选择 ,以便处理子树并在大型对象中方便地导航。
使用预览弹出窗口中的选项卡在结构化视图和原始视图之间切换:

监视
如果您想跟踪某个变量或更复杂表达式的结果,请为此变量或表达式设置监视。 当您需要评估列表中未定期显示的变量时,这非常有用。
此功能仅在程序在命中断点后暂停(而非 暂停 )时有效。
在所选帧的上下文中评估 Watches。 监视在上下文之外或编译失败时无法评估。 如果是这种情况,手表将标有错误图标 。
默认情况下,监视会与变量一起显示在 变量 窗格中。 要隐藏/显示 监视 窗格,请使用 分离 watches 选项,该选项位于 布局设置 菜单中。
添加监视
根据您想要跟踪的表达式:
对于编辑器中的表达式——选择表达式,然后点击浮动工具栏上出现的 添加到监视 图标
。 或者,将表达式拖动到 变量 选项卡。

对于当前上下文中的元素——右键点击 变量 选项卡中的变量,然后从菜单中选择 添加到监视。
对于任意表达式——在 变量 选项卡的顶部部分输入表达式,然后点击 添加到监视。

如果您只希望在检查特定类型的对象时显示监视,您可以为其设置类级别的监视。
添加类级别的监视
右键点击 变量 窗格中的此类对象,然后选择 新的类级别监视。
在您将一个变量/表达式添加到 监视 之后,它会保留在那里,并在每个 步骤中进行评估,为您提供当前上下文中的结果。

编辑监视
右键点击所需的监视器,然后选择 编辑。
删除监视
要移除单个监视,请右键点击并选择 移除监视。 或者,选择手表并按 Delete。
要移除所有监视,请右键点击 变量/监视 窗格上的任意位置,然后选择 移除所有监视。
监视允许执行与变量相同的操作。 例如,您可以 在专用对话框中查看它们 ,或使用它们 导航到源代码。
监视是您项目的一部分。 这意味着您可以停止并重新运行调试会话而不会有丢失它们的风险。
暂停和恢复监视
有时,监视可能依赖于本地上下文或涉及大量计算,使其在某些步骤中难以评估。 在这种情况下,您可以暂停监视并按需评估。
要暂停监视,请右键点击它并选择 暂停监视。
要恢复监视,请右键点击它并选择 继续监视。
要对暂停的监视执行一次性评估,请点击监视附近的 计算。
标签
在调试过程中,有时标记某些实例以便在任何上下文中轻松识别是很有用的。 对此,您可以添加标签。 一旦附上,标签将伴随对象的整个生命周期。

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

如果您希望跟踪某个实例而不受上下文影响,请为此标签创建一个 watch。 这种类型的观察器,无论当前框架和线程如何,对象总是在手边。
添加选项卡
在 变量 选项卡上,右键点击当前引用您想要跟踪的对象的变量或监视。 从菜单中选择 标记对象 F11。
请输入标签名称。 您可以选择显示颜色。 为此,请点击
并选择颜色。 完成配置后,点击 OK。

移除标签
右键点击您想要删除的标签,然后从菜单中选择 取消标记对象 F11。
执行点
返回当前执行点
检查程序状态涉及在代码中导航,您经常需要返回到程序挂起的位置。
请执行以下操作之一:
在主菜单中,前往 。
按下 Alt+F10。
在 调试 工具窗口的单步执行工具栏上点击
,并在打开的上下文菜单中选择
显示执行点。
