问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

如何使用VS Code调试Go代码

创作时间:
作者:
@小白创作中心

如何使用VS Code调试Go代码

引用
1
来源
1.
https://pengtech.net/golang/vscode_debug_golang.html

本教程将讨论使用 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:

nano main.go

在文件中添加以下内容:

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

// Avenger represents a single hero
type Avenger struct {
    RealName string `json:"real_name"`
    HeroName string `json:"hero_name"`
    Planet   string `json:"planet"`
    Alive    bool   `json:"alive"`
}

func (a *Avenger) isAlive() {
    a.Alive = true
}

func main() {
    avengers := []Avenger{
        {
            RealName: "Dr. Bruce Banner",
            HeroName: "Hulk",
            Planet:   "Midgard",
        },
        {
            RealName: "Tony Stark",
            HeroName: "Iron Man",
            Planet:   "Midgard",
        },
        {
            RealName: "Thor Odinson",
            HeroName: "Thor",
            Planet:   "Midgard",
        },
    }
    avengers[1].isAlive()
    jsonBytes, err := json.Marshal(avengers)
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println(string(jsonBytes))
}

这里我们定义一个结构体Avenger,然后创建一个复仇者数组,将其中一个的状态更改为”alive”,然后将结果转换为 JSON,最后将其打印到 STDOUT。

你可以使用以下命令运行该应用程序:

go run main.go

它将产生以下输出:

[
    {
        "real_name": "Dr. Bruce Banner",
        "hero_name": "Hulk",
        "planet": "Midgard",
        "alive": false
    },
    {
        "real_name": "Tony Stark",
        "hero_name": "Iron Man",
        "planet": "Midgard",
        "alive": true
    },
    {
        "real_name": "Thor Odinson",
        "hero_name": "Thor",
        "planet": "Midgard",
        "alive": false
    }
]

第 2 步 - 使用断点进行调试

要开始调试,我们需要创建一个配置。单击 VS Code 左侧窗格上的调试图标。接下来,单击齿轮图标以创建配置。

在下面创建了一个配置文件,.vscode/launch.json其内容如上所示。更改配置程序以指向该main.go文件。在本例中,由于我们只有一个main.go文件,我们可以将其更改为我们的工作区根目录:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch golang program",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "main.go"
        }
    ]
}

接下来我们需要添加一个断点,因为这就是调试的全部内容。让我们通过单击行号左侧在第 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

// ...
{
    RealName: "Tony Stark",
    HeroName: "Iron Man",
    Planet:   "Earth",
},
// ...

当我们再次使用 启动调试器时F5,调试视图会打开,并且执行会在断点处停止。我们可以看到 JSON 未显示在调试控制台中。

第 4 步 - 执行step into的调试

让我们向文件中添加一个新函数,以启用加法运算

func add(a, b int) int {
    return a + b
}

在同一目录下创建一个测试文件main_test.go,内容如下:

package main

import "testing"

func Test_add(t *testing.T) {
    a, b, c := 1, 2, 3
    res := add(a, b)
    if res != c {
        t.Fail()
    }
}

代码只是将两个数字相加,测试只是调用该函数。但是,如果你安装了 VSCode-Go 插件,你会在测试函数顶部看到其他选项 -运行测试和调试测试:

您可以单击运行测试来运行测试并在输出窗口中查看结果。然而,为了调试测试,可能是因为我们无法弄清楚某些事情,我们需要做的就是添加一个断点,就像我们之前做的那样,然后单击“调试测试”。

在第 10 行添加断点:if res != c。然后点击调试测试。

调试视图再次打开,我们可以使用调试工具来检查左侧变量部分的状态。

结论

调试是软件开发的重要部分,借助 VS Code 等工具,我们的生活可以变得更加轻松。我们已将调试器添加到示例项目中以解释概念,但您可以随意将调试器添加到任何现有项目中并试用它。您最终将减少fmt.Println用于记录的语句,以便在执行期间查看代码在给定点的值或状态。

参考文档

How To Debug Go Code with Visual Studio Code

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号