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

帧对应一个活动的方法或函数调用。 它存储被调用方法或函数的局部变量、参数以及支持表达式求值的代码上下文。
为了更好地理解 frame 的概念,下面让我们了解程序运行时发生了什么。 程序的执行从 main 方法开始,随后依次调用其他方法。 这些方法中的每一个都可能进一步调用其他方法。 每次方法调用的一组局部变量和参数由一个 frame 表示。
每次调用 方法 时,都会在堆栈顶部添加一个新的 frame。 当 方法 执行完成时,相应的 frame 会从堆栈中移除(后进先出)。
检查 frame 有助于理解为何传入特定参数以及调用时调用方的状态。
将堆栈复制到剪贴板
要复制当前线程的调用堆栈,请在 帧 选项卡中任意位置右键点击并选择 复制堆栈。
在同一选项卡中依次预览帧
预览选项卡允许您在一个标签页中连续打开多个文件。 这样可以避免在单独标签页中打开多个文件而使编辑器杂乱无章。
要为调试期间打开的文件启用预览模式,请按 Ctrl+Alt+S 打开设置,导航到 并勾选复选框 启用预览标签页。
隐藏对象类型
如果对象类型在 调试 工具窗口中占用了过多空间,请右键点击变量,并在出现的列表中取消选择 显示类型 选项。

在 Dump 选项卡中过滤 goroutine 列表
您可以创建程序使用的所有 goroutine 的转储,应用用于查找特定 goroutine 的筛选器,并研究筛选后的结果。 此过程有助于更好地理解程序或其特定部分的运行方式。
例如,下图显示了 Goroutine 1 main.main 的执行堆栈。 goroutine 列表中的 goroutine 名称为 “Goroutine <ID> <last_non-runtime_function_on_the_stack>。 非 runtime 表示该函数不属于 runtime 包。

Dump goroutine
在调试会话期间,点击
更多 并导航到 转储Goroutine。
可用的 goroutine 及其堆栈的转储将在单独的选项卡中打开。

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

右键点击要从列表中排除的 goroutine,并选择 隐藏 goroutine。 若要隐藏所有具有与所选 goroutine 相同堆栈的 goroutine,请从上下文菜单中选择 隐藏具有相同堆栈的 goroutine。
您可以在 已隐藏 列表下查看已隐藏的 goroutine。
要重置列表状态并使所有已隐藏的 goroutine 再次显示在列表中,请点击 重置已隐藏的 goroutine 按钮(
)。

将 Dump 结果导出为文本文件
点击 导出为文本文件 图标(
)。
在 导出为文件 字段中选择存储路径并点击 保存。

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

每个变量左侧的图标表示其类型。
变量类型
复制变量
检查变量时,您可能需要复制变量名称或值,以便将其粘贴到其他位置,或与另一个变量进行 比较。
要复制变量名称,请右键点击该变量并选择 复制名称。
要复制变量所包含的值,请右键点击该变量并选择 复制值 Ctrl+C。
与剪贴板比较变量
要将变量值与其他值进行比较,请使用 与剪贴板比较值 选项。 例如,如果变量包含长字符串,并且您需要将其与另一个长字符串进行比较,此功能就会很有帮助。
复制您想要比较的内容,例如来自文本文件的内容。
在 变量 选项卡中,右键点击某个变量并选择 与剪贴板比较值。
在打开的差异查看器中查看差异。 有关 差异查看器 的详细信息,请参见 比较文件和文件夹。

在专用对话框中查看变量
GoLand 允许您在专用对话框中检查变量。 这在您需要追踪某个变量(或它所持对象引用)并且同时能够在帧与 goroutine 间导航时非常有用。
右键点击某个变量或监视项,然后选择 检查。

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

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

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

求值表达式
GoLand 允许您在调试会话中评估表达式,以获取有关程序状态的其他详细信息,或在运行时测试各种执行方案。
此功能仅在程序因命中断点而挂起时可用(而不是 暂停)。
如果表达式中调用的方法里存在断点,它们将被忽略。
在编辑器中求值简单表达式
要快速评估某个表达式,请将鼠标指针移至编辑器中的该表达式。 请注意,不能通过此方式评估方法调用。
将鼠标指针移至您希望评估的表达式上。 表达式的结果将显示在工具提示中。

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

如果您觉得值提示工具令人分心,您可以延迟其显示或完全禁用该功能。 为此,请在 设置 对话框中(Ctrl+Alt+S ),转到 并根据您的偏好设置 显示数值工具提示 和 数值工具提示延迟 选项。
在编辑器中求值复杂表达式
如果您想评估包含方法调用的代码表达式,或指定表达式的特定部分进行评估,请使用 快速求值表达式 选项。
选择表达式并按下 Ctrl+Alt+F8 ,或从浮动工具栏中选择 求值表达式。

或者,转到 ,或按住 Alt 并单击选择项。
您可以配置 快速求值表达式 以便在选中一段代码时立即生效(无需使用菜单/快捷键)。 请谨慎使用此选项,因为启用后可能会意外调用方法。
选择代码时求值表达式
转到 并设置 在代码选择时显示数值工具提示 选项。
求值任意表达式
评估任意表达式是最灵活的评估方式。 只要处于当前帧的上下文中,您就可以评估任意自定义代码。 使用此方式,您可以评估声明、方法调用、匿名类型、lambda 表达式、循环等内容。
要评估任意表达式,请在 求值表达式 字段中输入表达式,然后在 变量 面板中按下 Enter
结果会显示在下方。 您还可以点击
,将表达式 添加到监视中 ,该图标位于表达式字段右侧。
如果您希望评估较长的代码块,建议使用专用对话框:
在专用对话框中评估表达式
如果您希望从当前代码中的某个表达式或变量开始(例如,在编辑器中或 变量 面板上),请选择该内容。
转到 Alt+F8 或从上下文菜单中选择 求值表达式。 该快捷键在 Ubuntu 上可能无效(如需正常使用,请 调整快捷键配置)。
在 求值 对话框中,修改所选表达式或在 表达式 字段中输入新表达式。 点击 展开 Shift+Enter 可修改多行代码片段。
点击 求值 (多行模式下为 Ctrl+Enter)。 表达式的结果将显示在 结果 字段中。
表达式的结果取自 return 语句。 如果没有 return 语句,则结果取自代码的最后一行(该行甚至不必是表达式:单个字面量也可以)。 如果没有有效的代码行可用于获取值,则结果为
undefined。 如果无法评估指定的表达式, 结果 字段将指示原因。
求值 对话框为非模态,您可以将焦点切回编辑器以复制其他变量和表达式。 您还可以打开多个 求值 对话框。
内联查看数值
GoLand 会在变量使用位置旁边显示其值。

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

内联视图默认启用。 要禁用此功能,请在 设置 对话框中(Ctrl+Alt+S ),转到 并禁用 内联显示值 选项。
添加内联监视
如果您希望某个表达式的结果出现在特定行上,可以为其设置一个内联 监视。 内联监视是持久的,在会话重启后依然有效。
单击指向您想要跟踪字段的对象的内联提示。
在弹窗中,选择字段并点击 添加为内联监视。
根据需要微调监视。 您可以使用任意有效表达式作为监视。
要移除内联监视,请将鼠标悬停于监视上,然后单击其旁边的叉号。
可视化 JSON 和 XML
当您展开 内联值 或 评估包含 JSON 或 XML 的字符串表达式 时,GoLand 将以结构化且格式化的方式显示数据。
这使您可以使用编辑器功能,如 代码折叠 以及 扩展或缩小选区 ,以操作子树并在大型对象中便捷导航。
在预览弹窗中使用标签页在结构化和原始视图之间切换:

监视
如果您想跟踪某个变量或更复杂表达式的结果,请为该变量或表达式设置监视。 此功能在评估未在变量列表中定期显示的内容,或固定某个实例变量以避免在每一步 操作后都需展开树结构时非常有用。
此功能仅在程序因命中断点而被挂起(而非 暂停 )时有效。
监视在所选帧的上下文中进行评估。 当监视处于上下文之外或无法编译时,无法对其进行评估。 在这种情况下,监视会使用错误图标 进行标记。
默认情况下,监视与变量一起显示在 变量 面板中。 要隐藏或显示 监视 面板,请使用 分离监视 选项,在 布局设置 菜单中进行设置。
添加监视
在 变量 选项卡上点击 新建监视
。
请输入要评估的变量或表达式。 在表达式中,您可以评估方法调用、函数文字、声明变量等,只要这些操作在本地上下文中即可。

将变量或表达式添加至 监视 后,它将保留在那里并在每次 操作 时进行评估,从而向您提供当前上下文中的结果。
编辑监视
右键点击所需的监视项并选择 编辑。
复制监视
选择您要复制的监视项。
在 变量/监视 选项卡上点击 复制监视
,或按 Ctrl+D。
更改监视顺序
为方便起见,您可以更改监视项在 变量/监视 面板中的显示顺序。
请使用 上移监视/下移监视 按钮控制 变量/监视 面板中的顺序,或使用键盘快捷键 Ctrl+Up 和 Ctrl+Down。
删除监视
要移除单个监视项,请右键点击并选择 移除监视。 或者,在 变量/监视 面板中选择监视项并按 Delete。
要移除所有监视项,请在 变量/监视 面板任意位置右键点击并选择 移除所有监视。
监视支持与变量相同的操作。 例如,您可以 在专用对话框中查看它们 ,或使用它们 导航至源代码。
监视是项目的一部分。 这意味着,您可以停止并重新运行调试会话而不会丢失监视项。
暂停与恢复监视
有时,监视可能依赖本地上下文或涉及复杂计算,使得在某些步骤中无法进行评估。 在这种情况下,您可以暂停监视,并按需进行评估。
要暂停监视,请右键点击并选择 暂停监视。
要恢复监视,请右键点击并选择 恢复监视。
执行点
返回当前执行点
检查程序状态涉及代码导航,您经常需要返回程序挂起的地方。
请执行以下任一操作:
在主菜单中,转到 。
按 Alt+F10。
在 调试 工具窗口的单步执行工具栏点击
,然后在弹出的上下文菜单中选择
显示执行点。
当前执行点以蓝色线条指示。 该行的代码尚未执行。
