GoLand 2025.3 Help

检查挂起的程序

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

  • 触发了一个 breakpoint

  • 您手动 暂停了程序

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

检查帧

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

帧选项卡

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

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

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

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

复制堆栈到剪贴板

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

在一个选项卡中连续预览帧

预览选项卡允许您在一个选项卡中连续打开文件。 通过这种方式,您可以避免在编辑器中打开多个文件而导致混乱。

  • 要启用调试期间打开文件的预览模式,请按 Ctrl+Alt+S 打开设置,导航到 编辑器 | 一般 | 编辑器标签页 并选中 启用预览标签页 复选框。

隐藏对象类型

  • 如果对象类型在 调试 工具窗口中占用了太多空间,请右键点击一个变量并在出现的列表中清除 显示类型 选项。

    debug-hide-object-types

在转储选项卡中过滤 goroutine 列表

您可以创建程序使用的所有 goroutine 的转储,应用过滤器以搜索特定的 goroutine,并研究过滤后的结果。 此过程可以帮助您更好地理解程序或其部分的工作原理。

例如,以下截图显示了 Goroutine 1 main.main 的执行堆栈。 goroutine 列表中的 goroutine 名称为 'Goroutine <ID> <last_non-runtime_function_on_the_stack>'。 非运行时意味着该函数不在 runtime 包中。

Goroutine 18 main.pageSize 的执行堆栈

转储 goroutine

  • 在调试会话期间,点击 更多更多 并导航到 转储Goroutine

    可用 goroutine 及其堆栈的转储会在单独的选项卡中打开。

    转储 goroutine

过滤转储结果

  • 点击 过滤器 图标 (筛选图标)。 在 过滤器 字段中,输入您想要搜索的字符串。

    过滤图标
  • 右键点击您想从列表中排除的 goroutine,然后选择 隐藏 goroutine。 要隐藏与选定 goroutine 具有相同堆栈的所有 goroutine,请从上下文菜单中选择 隐藏具有相同堆栈的 goroutine

    您可以在 隐藏 列表下查看隐藏的 goroutine。

    要重置列表状态并使所有隐藏的 goroutine 再次出现在可见列表中,请点击 重置隐藏的 Goroutine 按钮(重置隐藏 Goroutine 按钮)。

    隐藏 goroutine

将转储结果导出到文本文件

  1. 点击 导出到文本文件 图标 (导出到文本文件图标)。

  2. 导出到文件 字段中,选择一个存储路径并点击 保存

将转储结果导出到文本文件

检查/更新变量

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

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

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

变量类型

图标

描述

static 成员

封闭类型的静态成员

一个字段

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

包含自引用的字段

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

最终字段

最终字段

静态字段

static 字段

抛出的异常

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

一种方法返回值

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

一个参数

方法参数

一个枚举常量

枚举常量

一个数组

局部数组

原语

本地原始类型

一个观察点

监视和自动变量。

原语

局部引用变量

复制变量

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

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

  • 要复制变量所持有的值,请右键点击变量并选择 复制值 Ctrl+C

与剪贴板比较变量

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

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

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

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

    文本编辑器中的 RSA 密钥

在专用对话框中查看变量

GoLand 允许您在专用对话框中检查变量。 当您需要跟踪某些变量(或其引用的对象)并同时能够在帧和 goroutine 之间导航时,这非常有用。

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

    检查对话框

设置变量值

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

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

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

instance="rm"/>

内联提示菜单

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

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

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

    跳转到类型源会带您到变量类型定义的位置

计算表达式

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

此功能仅在程序在触发断点后挂起时有效(而非 暂停)。

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

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

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

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

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

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

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

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

如果您想在代码中计算涉及方法调用的表达式或指定表达式的特定部分以进行计算,请使用 对表达式快速求值 选项。

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

    值工具提示出现
  • 或者,转到 运行 | 调试操作 | 快速计算表达式 ,或按住 Alt 并点击所选内容。

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

选中代码时评估表达式

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

计算任意表达式

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

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

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

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

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

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

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

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

  4. 点击 计算Ctrl+Enter 以进入多行模式)。 表达式结果显示在 结果 字段中。

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

    表达式结果已计算

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

内联显示值

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

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

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

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

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

添加内联监视

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

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

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

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

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

可视化 JSON 和 XML

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

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

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

%alt

监视

如果您想跟踪某个变量或更复杂表达式的结果,请为该变量或表达式设置监视。 当您需要计算未定期显示在变量列表中的内容,或固定某些实例变量以消除每次 单步后展开树的需要时,这非常有用。

此功能仅在程序在触发断点后挂起时有效(而非 暂停)。

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

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

添加监视

  1. 点击 新建监视 新建监视按钮 ,位于 变量 选项卡上。

  2. 输入要计算的变量或表达式。 在表达式中,您可以计算方法调用、函数字面量、声明变量等,只要它们在本地上下文中。

    监视表达式

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

编辑监视

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

复制监视

  1. 选择您想要复制的监视。

  2. 点击 复制监视 “复制监视”按钮 ,位于 变量/监视 选项卡上,或按 Ctrl+D

更改监视的顺序

为了方便起见,您可以更改监视在 变量/监视 窗格中显示的顺序。

  • 使用 变量/监视 窗格上的 上移监视/下移监视 按钮或 Ctrl+UpCtrl+Down 键盘快捷键。

删除监视

  • 要移除单个监视,请右键点击并选择 移除监视。 或者,在 变量/监视 窗格中选择监视并按 Delete

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

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

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

暂停和恢复监视

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

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

  • 要恢复监视,请右键单击它并选择 恢复监视

执行点

返回当前执行点

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

请执行以下操作之一:

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

  • Alt+F10

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

当前的执行点用蓝色线条表示。 此行代码尚未执行。

变量的内联值随每一步骤而变化
最后修改日期: 2025年 12月 5日