1. 前言
本文学习在VSCode中配置Golang Debug的方法,备忘。
参考资料:
2. 安装Golang环境
参考文档:好好学Golang:Golang入门篇
3. 安装Golang扩展和工具
使用Visual Studio Code的Go扩展,我们可以获得像IntelliSense、代码导航、符号搜索、测试、调试等许多功能,这些功能将帮助我们进行Go开发。
1、安装Golang扩展
点击侧边栏 Extensions ,搜索 Go ,点击 Install
2、安装Golang工具command+shift+P
,输入 Go: Install/Update tools
,全部勾选,点击OK
安装过程Golang工具的过程,会显示在OUTPUT
中。
3、检查Golang工具command+shift+P
,输入 Go: Locate Configured Go Tools
,查看 Go Tools 是否都已经安装完成
PS:安装好Golang工具后,可以避免VSCode保存go文件时卡住问题。
1 | Saving 'main.go': Getting code actions from ''Go'' (configure). |
4. 配置Golang代理
安装过程Golang工具时,如果下载超时,那么需要配置Golang代理:
1 | go env | grep GOPROXY |
这个配置,会写入到Golang环境变量配置文件中,对所有shell永久生效。
Golang环境变量配置文件可能的路径:
$(go env GOROOT)/go.env
$(go env GOPATH)/go.env
$(go env HOME)/go.env
$HOME/Library/Application Support/go/env
安装完成可以取消Golang代理:
1 | go env -w GOPROXY= |
对于单次shell配置Golang代理,可以参考goproxy.io快速上手
5. 配置调试
5.1. 创建 launch.json
1、点击VSCode左侧带虫子的三角形,进入RUN AND DEBUG页面
2、点击 create a launch.json file
,选择 Go: Launch Package
5.2. 打开 launch.json
1、点击VSCode左侧带虫子的三角形,进入RUN AND DEBUG页面
2、点击齿轮,打开 launch.json
文件
或者,直接在项目中打开 .vscode/launch.json
文件
5.3. 配置 launch.json
假设程序启动命令为 go run main.go
,那么配置如下:
1 | { |
6. 启动调试
1、在代码中打断点
2、点击VSCode左侧带虫子的三角形,进入RUN AND DEBUG页面
3、点击齿轮左边的三角形,即可进入调试
7. 调试报错问题解决
7.1. 缺少 dlv 模块问题
点击调试,可能会报错:
1 | The "dlv" command is not available. Run "go install -v github.com/go-delve/delve/cmd/dlv@latest" to install. |
根据提示安装 dlv 即可:
1 | go install -v github.com/go-delve/delve/cmd/dlv@latest |
7.2. 缺少模块定义问题
点击调试,还可能会报错:
1 | Starting: /Users/vk/git/go/bin/dlv dap --listen=127.0.0.1:63418 --log-dest=3 from /Users/vk/git/pod-data-restorer |
这个错误信息表明这个 Go 项目缺少一个模块定义,即缺少 go.mod 文件。在 Go 1.11 版本及以后,推荐使用模块来管理项目的依赖。
解决办法:
1 | cd /Users/vk/git/pod-data-restorer |
8. VSCode调试Golang原理
VSCode调试Golang的原理主要依赖于一个叫做Delve(dlv)的开源工具,这是一个专门为Go语言设计的调试器。
- Delve:Delve是用Go语言编写的调试器,可以理解为Go语言的gdb调试工具。其实现了GDB/MI调试引擎接口,并具有丰富的特性,如断点、单步执行、调用栈跟踪、查看变量值与内存状态等。VSCode通过调用Delve,并把Delve的结果展示在VSCode界面中。
- VSCode Go插件:VSCode中提供了一款非常强大的Go语言插件,这个插件支持Delve调试。安装该插件后,用户可以在VSCode中进行断点设置、单步执行、查看变量值等Debug操作,插件内部调用Delve的相关命令去获取程序状态,并把结果反馈到VSCode界面中。
- DAP:当用户启动Debug会话时,VSCode调用Delve启动一个调试服务器,然后VSCode会用一种叫Debugger Adapter Protocol的协议与这个服务器进行通信,通过这种方式对GPC程序进行推进、停顿、查看变量值等操作。
总的来说,VSCode调试Golang的原理,其实主要是VSCode、Go插件与Delve三者的协同工作。其中Delve在底层扮演了与Go程序交互的角色,VSCode和Go插件在上层提供了用户友好的交互接口。