如何使用VS Code调试Go代码
本教程将讨论使用 VS Code 调试 Go 代码所需的步骤。首先我们需要安装扩展、分析工具和调试器。
然后,我们将创建一个示例应用程序。最后,我们将探索如何使用断点和条件断点。
凭借这套技能,您将能够更好地理解应用程序在代码执行的特定点上的值和状态。
先决条件
要完成本教程,您需要以下内容:
已在您的机器上安装 Go。要在您的机器上安装 Go,请参照 Go 系列中的教程为您的操作系统设置本地编程环境。
您的机器上安装了 VS Code, 请参考VSCode 安装和配置指南进行安装与配置 。
已安装 VSCode -Go 插件。
安装插件后,在 VS Code 中打开任意.go 文件。状态栏右下角会提示您安装分析工具。单击该链接安装插件有效运行所需的 Go 包。
最后,我们需要安装Delve,一个用于 Go 的开源调试器。为此,有针对特定平台的详细安装说明。
第 1 步 - 创建示例应用程序
我们将使用两个示例来调试我们的 Go 代码:
生成 JSON 文件的 Go 程序。
我们将编写一个函数,编写测试,并了解如何在 VS Code 中调试测试。
这是第一个例子的源代码。创建一个文件 main.go:
1 | nano main.go |
在文件中添加以下内容:
1 | package main |
这里我们定义一个结构体Avenger,然后创建一个复仇者数组,将其中一个的状态更改为”alive”,然后将结果转换为 JSON,最后将其打印到 STDOUT。
你可以使用以下命令运行该应用程序:
1 |
|
它将产生以下输出:
1 |
|
第 2 步 - 使用断点进行调试
要开始调试,我们需要创建一个配置。单击 VS Code 左侧窗格上的调试图标。接下来,单击齿轮图标以创建配置。
在下面创建了一个配置文件,.vscode/launch.json其内容如上所示。更改配置程序以指向该main.go文件。在本例中,由于我们只有一个main.go文件,我们可以将其更改为我们的工作区根目录:
1 | { |
接下来我们需要添加一个断点,因为这就是调试的全部内容。
让我们通过单击行号左侧在第 21 行( ) 添加一个断点。在那里,您将看到一个红点。func main()
接下来,按下或单击左上角调试部分F5上带有绿色播放按钮的启动按钮以打开调试视图。
多次单击调试工具栏Step Over上的按钮。
调试器最终将移动到第 40 行。
左侧的调试部分将为我们提供当前断点位置的状态。
我们可以在变量部分看到特定时间的变量的状态或值。
我们还可以看到调用堆栈,此刻正在运行的函数是该main函数,第 40 行。
avengers您可以继续“跨过”,一旦我们越过该线,您就会看到变化的值。”Tony Stark”是Alive。
第 3 步 - 添加条件断点
VS Code 断点为您提供了通过赋予表达式来编辑断点的选项,该表达式大多数时候通常是一个布尔表达式。
例如,在第 40 行,avengers[1].isAlive()我们可以在此处添加一个条件,即仅当表达式计算结果为真时才会引发断点,如avengers[1].Planet == “Earth”。
为此,右键单击断点并选择编辑断点。
如果您没有断点,您仍然可以右键单击,然后系统会提示您添加条件断点。
选择上述任意一项后,让我们添加条件:avengers[1].Planet == “Earth”。
现在,如果您使用 启动调试器,它将不会在断点处停止。应用程序将正常运行,您将在调试控制台F5中看到结果。
接下来,编辑代码以符合我们的预期。将 Tony Stark 的星球更改为Earth
1 | // ... |
当我们再次使用 启动调试器时F5,调试视图会打开,并且执行会在断点处停止。我们可以看到 JSON 未显示在调试控制台中。
第 4 步 - 执行step into的调试
让我们向文件中添加一个新函数,以启用加法运算
1 | func add(a, b int) int{ |
在同一目录下创建一个测试文件main_test.go,内容如下:
1 | package main |
代码只是将两个数字相加,测试只是调用该函数。
但是,如果你安装了 VSCode-Go 插件,你会在测试函数顶部看到其他选项 -运行测试和调试测试:
您可以单击运行测试来运行测试并在输出窗口中查看结果。
然而,为了调试测试,可能是因为我们无法弄清楚某些事情,我们需要做的就是添加一个断点,就像我们之前做的那样,然后单击“调试测试”。
在第 10 行添加断点:if res != c。然后点击调试测试。
调试视图再次打开,我们可以使用调试工具来检查左侧变量部分的状态。
结论
调试是软件开发的重要部分,借助 VS Code 等工具,我们的生活可以变得更加轻松。
我们已将调试器添加到示例项目中以解释概念,但您可以随意将调试器添加到任何现有项目中并试用它。您最终将减少fmt.Println用于记录的语句,以便在执行期间查看代码在给定点的值或状态。
参考文档
如何使用VS Code调试Go代码