Mac下使用VS Code断点调试golang程序

安装delve

Devle是一个非常棒的golang 调试工具,支持多种调试方式,直接运行调试,或者attach到一个正在运行中的golang程序,进行调试。
线上golang服务出现问题时,Devle是必不少的在线调试工具,如果使用docker,也可以把Devle打进docker镜像里,调试代码。
在命令终端terminate中执行以下安装命令,进行delve的安装。
$ go get -u github.com/go-delve/delve/cmd/dlv

设置 launch.json 配置文件

command + shift + p 调出下拉列表,输入或者选择 Debug: Open launch.json,打开 launch.json 文件,如果第一次打开,会新建一个配置文件,默认配置内容如下

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${fileDirname}",
            "env": {},
            "args": []
        }
    ]
}

可能用到的属性介绍

启动配置必须具有的属性

每个启动配置都必须具有以下属性:
type - 用于此启动配置的调试器的类型,如python,go,Java等。每安装调试扩展引入一个类型:node用于内置节点调试器,例如,或php与go对PHP和去扩展。
request - 此启动配置的请求类型。目前,launch并且attach受到支持。
name - 阅读器友好名称,显示在“调试启动配置”下拉列表中。

可选属性

以下是可用于所有启动配置的一些可选属性:

preLaunchTask- 要在调试会话开始之前启动任务,请将此属性设置为tasks.json中指定的任务的名称(在工作空间的.vscode文件夹中)。
postDebugTask- 要在调试会话的最后启动任务,请将此属性设置为tasks.json中指定的任务的名称(在工作空间的.vscode文件夹中)。
internalConsoleOptions - 此属性控制调试会话期间“调试控制台”面板的可见性。
debugServer- 仅适用于调试扩展作者:此属性允许您连接到指定的端口,而不是启动调试适配器。

常用到的一些属性

许多调试器支持以下某些属性:

 program - 启动调试器时要运行的可执行文件或文件
 args - 传递给程序进行调试的参数
 env- 环境变量(该值null可用于“取消定义”变量)
 cwd - 当前工作目录,用于查找依赖项和其他文件
 port - 连接到正在运行的进程时的端口
 stopOnEntry - 程序启动时立即中断
 console-要使用什么样的主机,例如internalConsole,integratedTerminal或externalTerminal

常见属性如下

name	调试界面下拉选择项的名称(在最上面的DEBUG和设置按钮中间)
type	设置为go无需改动,是 vs code 用于计算调试代码需要用哪个扩展
mode	可以设置为 auto, debug, remote, test, exec 中的一个
program	调试程序的路径(绝对路径)
env	调试时使用的环境变量。例如:{ "ENVNAME": "ENVVALUE" , "go.gopath":"/Users/xx/go/src/xxx/项go项目名/cmd/http/main.go"},    // 调试时使用的环境变量。例如:{ "ENVNAME": "ENVVALUE" },gopath要指向本次要调试项目的主入口,即main.go所在的绝对路径
envFile	包含环境变量文件的绝对路径,在 env 中设置的属性会覆盖 envFile 中的配置
args	传给正在调试程序命令行参数数组
showLog	布尔值,是否将调试信息输出
logOutput	配置调试输出的组件(debugger, gdbwire, lldbout, debuglineerr, rpc),使用,分隔, showLog 设置为 true 时,此项配置生效
buildFlags	构建 go 程序时传给 go 编译器的标志
remotePath	远程调试程序的绝对路径,当 mode 设置为 remote 时有效
在 debug 配置中使用 VS Code 变量
${workspaceFolder} 调试 VS Code 打开工作空间的根目录下的所有文件
${file} 调试当前文件
${fileDirname} 调试当前文件所在目录下的所有文件
使用构建标记(build tags)
如果需要使用构建标记(e.g. go build -tags=whatever_tag)在参数 buildFlags 里写入 -tags=whatever_tag" 即可,支持多标签,使用单引号将标签包围,例如: "-tags='first_tag second_tag third_tag'"

debug 配置代码片段

可以在 launch.json 文件中,使用 Go 关键词调出 debug 配置项的代码片段。

调试当前文件配置片段

{
    "name": "Launch file",
    "type": "go",
    "request": "launch",
    "mode": "auto",
    "program": "${file}"
}

调试单个测试用例配置片段

{
    "name": "Launch test function",
    "type": "go",
    "request": "launch",
    "mode": "test",
    "program": "${workspaceFolder}",
    "args": [
        "-test.run",
        "MyTestFunction"
    ]
}

调试包中所有的测试用例配置片段

{
    "name": "Launch test package",
    "type": "go",
    "request": "launch",
    "mode": "test",
    "program": "${workspaceFolder}"
}

调试构建二进制文件配置片段

{
    "name": "Launch executable",
    "type": "go",
    "request": "launch",
    "mode": "exec",
    "program": "absolute-path-to-the-executable"
}

远程调试

远程调试需要在launch.json中将模式设置为远程"mode":“remote”,并且还需要服务器上起一个无头的 Delve 服务
例如:

$ dlv debug --headless --listen=:2345 --log --api-version=2

如果需要传参数到程序中,则需要将参数传入到 Delve 服务中
例如:

dlv debug --headless --listen=:2345 --log -- -myArg=123

launch.json 配置如下:

{
    "name": "Launch remote",
    "type": "go",
    "request": "launch",
    "mode": "remote",
    "remotePath": "服务器调试文件的目录(绝对路径)",
    "port": 2345,
    "host": "127.0.0.1",
    "program": "本地调试文件所在的目录(绝对路径)",
    "env": {}
}

将上述配置中的 host 和 port 修改 成Delve 服务所在的服务器ip和其监听的端口号。
remotePath 应该配置为调试文件的绝对路径
program 需要配置本地机器文件所在的绝对路径,是 remotePath 的一个副本
配置完成后,点击调试按钮,VS Code 将会向远程的 dlv 服务发出调试指令,而不是使用本机的 dlv 实例。

调试过程

在要进行调试的自定义函数或者自定义变量处,设置断点,断点的数目可以设置多个(注意,不要在开源的包中实现的方法处打断点,要不然调用栈会一直深入到开源实现的底层函数/变量处)。然后 Fn + F10(step over)进行单步调试(单步调试会跳过本次不执行的分支),左边栏中的VARIABLES变量中可以看到各个变量值的变化。如果想要进入到当前调试行中的函数里面,可以使用Fn + F11(step into)调入函数,不再想要执行函数内的语句,则可以 Fn + Shift+F11 (Step out ) 直接跳出当前函数,跳到上一次进入处的下一条语句。

注意:尽管在launch.json中定义了主函数main.go的绝对路径,但是在调试时,仍然想要先打开main.go程序,然后在启动调试Fn + F5后,跳转到要调试的程序处,接着可以选择单步调试Fn + F10或者进入函数Fn + F11,跳出函数Fn + shift + F11。通常,如果断点处又调用了其他自定义的函数,可以在分别在这个调用函数处和函数定义内部的其他函数调用/变量处打上多个断点,接着进行调试。

参考

https://code.visualstudio.com/Docs/editor/debugging
https://juejin.im/entry/5aa1f98d6fb9a028c522c84b
https://segmentfault.com/a/1190000018671207
https://github.com/Microsoft/vscode-go/wiki/Debugging-Go-code-using-VS-Code#sample-configuration-to-debug-a-single-test
https://github.com/go-delve/delve/tree/master/Documentation/installation

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要在 Mac 电脑上使用 VS Code 进行 Golang 开发,需要完成以下步骤: 1. 安装 Golang 首先,需要安装 Golang。可以从官网上下载并安装 Golang:https://golang.org/dl/ 2. 安装 VS Code 接下来,需要安装 VS Code。可以从官网上下载并安装 VS Code:https://code.visualstudio.com/ 3. 安装 Go 插件 打开 VS Code,点击左侧的扩展(Extension)图标,搜索并安装官方的 Go 插件。安装完毕后,需要重启 VS Code。 4. 配置环境变量 打开终端,输入以下命令,打开 `.bash_profile` 文件(如果没有则新建): ``` $ vi ~/.bash_profile ``` 在文件中添加以下两行代码: ``` export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin ``` 保存并退出文件,然后执行以下命令以使其生效: ``` $ source ~/.bash_profile ``` 5. 创建项目 创建一个新的 Golang 项目,在终端中使用以下命令: ``` $ mkdir hello $ cd hello $ go mod init hello ``` 6. 编写代码 在 VS Code 中打开 `hello` 文件夹,创建一个名为 `main.go` 的文件,并编写以下代码: ```go package main import "fmt" func main() { fmt.Println("Hello, world!") } ``` 7. 运行代码 在 VS Code 中打开终端,使用以下命令运行代码: ``` $ go run main.go ``` 这样,就可以使用 VS Code 进行 Golang 开发了。 ### 回答2: 要在Mac电脑上集成Golang开发环境,可以按照以下步骤进行: 第一步,首先要确保你的Mac上已经安装了Golang。你可以前往Golang官方网站下载安装包,并按照指示进行安装。安装完成后,在终端中输入“go version”命令来验证Golang是否成功安装。 第二步,安装集成开发环境(IDE)如VS Code。你可以在VS Code官方网站下载安装包,并进行安装。安装完成后,打开VS Code。 第三步,打开VS Code的扩展功能,搜索并安装"Golang"扩展。这个扩展可以提供Golang相关的功能和语法高亮等。 第四步,配置VS Code以与Golang集成。首先,点击左侧的九宫格按钮,打开扩展视图。然后,在搜索框中输入"Golang"来找到相应的扩展。点击扩展旁边的齿轮图标打开设置。在设置中,你可以配置Golang的路径、代理设置等。 第五步,设置GOPATH和GOROOT环境变量。在Mac上,你可以通过在终端中运行"export"命令来设置这些环境变量。GOPATH是你的工作区目录,而GOROOT是Golang的安装路径。 第六步,创建一个Golang项目。在终端中,进入到你想要创建项目的目录,然后运行"mkdir"命令来创建一个文件夹。进入该文件夹,并打开VS Code。 第七步,编写Golang代码。在VS Code中,创建一个新文件,使用".go"为文件后缀。接下来,你可以编写Golang代码,并使用VS Code提供的自动补全和语法高亮功能。 第八步,运行Golang代码。在终端中,使用"go run"命令来运行你的Golang代码。你也可以使用其他命令来构建和运行你的项目。 综上所述,在Mac电脑上集成Golang开发环境,你需要安装GolangVS Code以及相关扩展,并进行一些配置。然后,你可以使用VS Code来创建和编写Golang项目,并在终端中运行你的代码。 ### 回答3: 要在Mac电脑上集成golang开发环境,可以按照以下步骤进行操作: 1. 安装Golang:在Mac电脑上打开终端,可以使用命令行工具Homebrew安装golang。在终端中输入以下命令: ``` brew install golang ``` 这将会安装最新版本的Golang。 2. 配置环境变量:在终端中输入以下命令,打开.bash_profile文件: ``` open ~/.bash_profile ``` 在打开的文件中添加以下内容,保存并关闭文件: ``` export GOROOT=/usr/local/opt/go/libexec export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin ``` 这将设置GOROOT、GOPATH和PATH环境变量。 3. 安装VS Code:在Mac电脑上下载并安装Visual Studio CodeVS Code)。 4. 安装Go扩展插件:在VS Code中打开扩展视图(左侧的方块图标),搜索并安装Go扩展插件,然后重新启动VS Code。 5. 创建Go项目:在终端中输入以下命令,创建一个新的Go项目: ``` mkdir ~/go/src/myproject ``` 这将在GOPATH目录下创建一个myproject文件夹来存放项目代码。 6. 在VS Code中打开项目:在VS Code的菜单中选择“文件” -> “打开文件夹”,然后选择上一步创建的myproject文件夹。 7. 配置调试环境:在项目文件夹中创建一个名为“launch.json”的文件,添加以下内容: ``` { "version": "0.2.0", "configurations": [{ "name": "Launch", "type": "go", "request": "launch", "mode": "debug", "program": "${file}" }] } ``` 这将配置VS Code调试功能。 8. 开始编写代码:使用VS Code编写、调试和运行Go代码。 通过以上步骤,你可以在Mac电脑上成功集成golang开发环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

love666666shen

谢谢您的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值