vscode 调试指南
概述
本文将介绍如何使用 vscode 调试 golang 程序,重点介绍 launch.json 的配置,一个良好的配置可以让你的调试更省心。
使用 vscode 调试 Go 程序
1、安装 Go 扩展
当你打开一个 Go 项目的时候,如果你尚未安装 Go 扩展,vscode 会自动推荐你安装 Go 扩展,这个时候你只需要点击一下安装即可。即便你现在不安装,调试的时候,还是会再次提示你安装。
下面这张图的右下角的提示框便是 vscode 检测到尚未安装 Go 扩展而给出的提示,按照提示安装即可。
2、编写 launch.json
点击图中那个左下角有个小爬虫的三角形进入调试界面
点击创建 launch.json,出现三个选项
选择“Go: Launch Package”,会生成 launch.json
3、开始调试
launch.json 生成之后,已经可以开始调试了。但这个时候还需要一点技巧,我们需要打开 main.go,然后按下 F5 快捷键开始调试,在这之前可以根据需要打上若干个断点。
需要注意的是:你的 Go 程序 main 方法所在的源文件可能不一定是 main.go,这个时候只需要打开 main 方法所在的文件,按下 F5 快捷键开始调试。以下假设 main 方法所在的文件为 main.go。
一定要打开 main.go 才能调试吗?我们注意到 launch.json 中 program 配置项的值为 “${fileDirname}”,${fileDirname} 是 vscode 内置变量,表示当前打开文件所在的文件夹路径。这个路径必须包含 main.go,因此不一定必须打开 main.go, 打开任意一个和 main.go 在同一个文件夹下的文件都可以。
注:更多 vscode 内置变量,请自行查阅文档。
默认生成的 launch.json 的缺点之一就是必须打开 main.go 才能开始调试,我们可以优化配置将 program 的这配置值修改为 ${workspaceFolder}/main.go
完整的 launch.json 配置如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/main.go"
}
]
}
${workspaceFolder} 表示项目的根目录,由于 main.go 在项目的根目录下,${workspaceFolder}/main.go
给 Go 调试器提供了完整入口路径,通过这样的配置,我们可以随时按下 F5 开始调试,无需预先打开任何文件。
添加运行参数
有时候在运行 main.go 时,需要传递若干个参数,典型的应用场景就是在使用 cobra 书写命令行程序时,假设我们编写一个 start 命令用于启动服务器,运行命令需要使用 go run main.go start
。
这种又该如何调试呢?这里的 start 其实是一个传递给 main.go 的一个参数,调试 main.go 的时候,我们通过 args 配置参数将 start 参数传递给 main.go,配置方法如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Debug with args demo",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/main.go",
"args": ["start"]
}
]
}
可以看到 args 是个数组,如果有必要,完全可以传递多个参数。
阻碍调试的其它问题
Couldn't start dlv dap:
Error:timed out while waiting for DAP server to start
这个问题可能是由于 vscode Go extension 更新导致的,可以更新 go extension tools。具体做法可以参考 stackoverflow,我将关键步骤提取如下:
This might be happening due to recent updates to VS Code Go extension.
.
First options is to fix it by running "Go: Install/Update Tools" command from the Command Palette (Linux/Windows: Ctrl+Shift+P, Mac: ⇧+⌘+P).
温馨提示:反馈需要登录