GoLand 2025.2 Help

检查已挂起的程序

调试会话 启动后,会显示 Debug 工具窗口,程序将正常运行,直到发生以下任一情况:

  • 触发了 断点

  • 手动 暂停程序

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

检查帧

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

帧选项卡

帧对应一个活动的方法或函数调用。 它存储被调用方法或函数的局部变量、参数以及支持表达式求值的代码上下文。

为了更好地理解 frame 的概念,下面让我们了解程序运行时发生了什么。 程序的执行从 main 方法开始,随后依次调用其他方法。 这些方法中的每一个都可能进一步调用其他方法。 每次方法调用的一组局部变量和参数由一个 frame 表示。

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

检查 frame 有助于理解为何传入特定参数以及调用时调用方的状态。

将堆栈复制到剪贴板

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

在同一选项卡中依次预览帧

预览选项卡允许您在一个标签页中连续打开多个文件。 这样可以避免在单独标签页中打开多个文件而使编辑器杂乱无章。

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

隐藏对象类型

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

    debug-hide-object-types

在 Dump 选项卡中过滤 goroutine 列表

您可以创建程序使用的所有 goroutine 的转储,应用用于查找特定 goroutine 的筛选器,并研究筛选后的结果。 此过程有助于更好地理解程序或其特定部分的运行方式。

例如,下图显示了 Goroutine 1 main.main 的执行堆栈。 goroutine 列表中的 goroutine 名称为 “Goroutine <ID> <last_non-runtime_function_on_the_stack>。 非 runtime 表示该函数不属于 runtime 包。

Goroutine 18 main.pageSize 的执行堆栈

Dump goroutine

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

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

    Dump goroutine

过滤 Dump 结果

  • 点击 过滤 图标(过滤图标)。 在 过滤 字段中输入要搜索的字符串。

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

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

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

    隐藏 goroutine

将 Dump 结果导出为文本文件

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

  2. 导出为文件 字段中选择存储路径并点击 保存

将 Dump 结果导出为文本文件

检查/更新变量

变量 选项卡显示所选 frame/thread 中的变量列表。 检查变量有助于理解程序为何以特定方式运行。

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

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

变量类型

图标

描述

静态成员

封闭类型的静态成员

字段

对象字段(包括静态字段与非静态字段)

包含自引用的字段

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

final 字段

final 字段

静态字段

静态字段

抛出的异常

抛出的异常(仅在触发 异常断点 时显示)

方法返回值

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

参数

方法参数

枚举常量

枚举常量

数组

局部数组

原始类型

局部原始类型

监视

监视与自动变量。

原始类型

局部引用变量

复制变量

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

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

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

与剪贴板比较变量

要将变量值与其他值进行比较,请使用 与剪贴板比较值 选项。 例如,如果变量包含长字符串,并且您需要将其与另一个长字符串进行比较,此功能就会很有帮助。

  1. 复制您想要比较的内容,例如来自文本文件的内容。

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

  3. 在打开的差异查看器中查看差异。 有关 差异查看器 的详细信息,请参见 比较文件和文件夹

    文本编辑器中的 RSA 密钥

在专用对话框中查看变量

GoLand 允许您在专用对话框中检查变量。 这在您需要追踪某个变量(或它所持对象引用)并且同时能够在帧与 goroutine 间导航时非常有用。

  • 右键点击某个变量或监视项,然后选择 检查

    检查对话框

设置变量值

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

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

  2. 输入变量的新值并按下 Enter

instance="rm"/>

内联提示菜单

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

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

    “跳转到源代码”会带您前往变量声明的位置
  • 要导航到变量类型的类型声明,请右键点击该变量,然后选择 跳转到类型源代码 Shift+F4

    “跳转到类型源代码”会带您前往定义变量类型的位置

求值表达式

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

此功能仅在程序因命中断点而挂起时可用(而不是 暂停)。

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

在编辑器中求值简单表达式

要快速评估某个表达式,请将鼠标指针移至编辑器中的该表达式。 请注意,不能通过此方式评估方法调用。

  1. 将鼠标指针移至您希望评估的表达式上。 表达式的结果将显示在工具提示中。

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

    结果对象以树状表示。 这有助于查看其内部状态

如果您觉得值提示工具令人分心,您可以延迟其显示或完全禁用该功能。 为此,请在 设置 对话框中(Ctrl+Alt+S ),转到 构建、执行、部署 &#xa0;| 调试器 | 数据视图 并根据您的偏好设置 显示数值工具提示数值工具提示延迟 选项。

在编辑器中求值复杂表达式

如果您想评估包含方法调用的代码表达式,或指定表达式的特定部分进行评估,请使用 快速求值表达式 选项。

  • 选择表达式并按下 Ctrl+Alt+F8 ,或从浮动工具栏中选择 求值表达式

    数值工具提示显示
  • 或者,转到 运行 | 调试操作 | 快速求值表达式 ,或按住 Alt 并单击选择项。

您可以配置 快速求值表达式 以便在选中一段代码时立即生效(无需使用菜单/快捷键)。 请谨慎使用此选项,因为启用后可能会意外调用方法。

选择代码时求值表达式

  • 转到 设置 | 构建、执行、部署 &#xa0;| 调试器 | 数据视图 并设置 在代码选择时显示数值工具提示 选项。

求值任意表达式

评估任意表达式是最灵活的评估方式。 只要处于当前帧的上下文中,您就可以评估任意自定义代码。 使用此方式,您可以评估声明、方法调用、匿名类型、lambda 表达式、循环等内容。

  1. 要评估任意表达式,请在 求值表达式 字段中输入表达式,然后在 变量 面板中按下 Enter

  2. 结果会显示在下方。 您还可以点击 ,将表达式 添加到监视中 ,该图标位于表达式字段右侧。

如果您希望评估较长的代码块,建议使用专用对话框:

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

  1. 如果您希望从当前代码中的某个表达式或变量开始(例如,在编辑器中或 变量 面板上),请选择该内容。

  2. 转到 运行 | 调试操作 | 求值表达式 Alt+F8 或从上下文菜单中选择 求值表达式。 该快捷键在 Ubuntu 上可能无效(如需正常使用,请 调整快捷键配置)。

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

  4. 点击 求值 (多行模式下为 Ctrl+Enter)。 表达式的结果将显示在 结果 字段中。

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

    表达式结果已计算

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

内联查看数值

GoLand 会在变量使用位置旁边显示其值。

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

变量值发生变化后,内联视图将自动更新为新值并更改其颜色。

变量的内联数值会随着每一步发生变化

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

添加内联监视

如果您希望某个表达式的结果出现在特定行上,可以为其设置一个内联 监视。 内联监视是持久的,在会话重启后依然有效。

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

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

  3. 根据需要微调监视。 您可以使用任意有效表达式作为监视。

要移除内联监视,请将鼠标悬停于监视上,然后单击其旁边的叉号。

可视化 JSON 和 XML

当您展开 内联值评估包含 JSON 或 XML 的字符串表达式 时,GoLand 将以结构化且格式化的方式显示数据。

这使您可以使用编辑器功能,如 代码折叠 以及 扩展或缩小选区 ,以操作子树并在大型对象中便捷导航。

在预览弹窗中使用标签页在结构化和原始视图之间切换:

%alt

监视

如果您想跟踪某个变量或更复杂表达式的结果,请为该变量或表达式设置监视。 此功能在评估未在变量列表中定期显示的内容,或固定某个实例变量以避免在每一步 操作后都需展开树结构时非常有用。

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

监视在所选帧的上下文中进行评估。 当监视处于上下文之外或无法编译时,无法对其进行评估。 在这种情况下,监视会使用错误图标 错误图标 进行标记。

默认情况下,监视与变量一起显示在 变量 面板中。 要隐藏或显示 监视 面板,请使用 分离监视 选项,在 布局设置 恢复布局按钮 菜单中进行设置。

添加监视

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

  2. 请输入要评估的变量或表达式。 在表达式中,您可以评估方法调用、函数文字、声明变量等,只要这些操作在本地上下文中即可。

    监视表达式

将变量或表达式添加至 监视 后,它将保留在那里并在每次 操作 时进行评估,从而向您提供当前上下文中的结果。

编辑监视

  • 右键点击所需的监视项并选择 编辑

复制监视

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

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

更改监视顺序

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

  • 请使用 上移监视/下移监视 按钮控制 变量/监视 面板中的顺序,或使用键盘快捷键 Ctrl+UpCtrl+Down

删除监视

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

  • 要移除所有监视项,请在 变量/监视 面板任意位置右键点击并选择 移除所有监视

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

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

暂停与恢复监视

有时,监视可能依赖本地上下文或涉及复杂计算,使得在某些步骤中无法进行评估。 在这种情况下,您可以暂停监视,并按需进行评估。

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

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

执行点

返回当前执行点

检查程序状态涉及代码导航,您经常需要返回程序挂起的地方。

请执行以下任一操作:

  • 在主菜单中,转到 运行(U) &#xa0;|调试操作 &#xa0;| 显示执行点

  • Alt+F10

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

当前执行点以蓝色线条指示。 该行的代码尚未执行。

变量的内联数值会随着每一步发生变化
最后修改日期: 2025年 9月 26日