答案: 基于putus回答,我想出了以下配置,只需点击一下即可构建和调试
首先,您需要添加一个任务来构建具有相应标记的二进制文件。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "0.1.0",
"command": "bash",
"isShellCommand": true,
"args": [""],
"showOutput": "always",
"tasks": [
{
"taskName": "buildBinWithTag",
"command": "go",
"args": ["build", "-o", "BinaryName", "-tags", "THISISATAG"],
"isShellCommand": true
}
]
}
此任务应在调试器启动之前执行。
{
"version": "0.2.0",
"configurations": [
{
"name": "DebugBinWithTag", //added config
"type": "go",
"request": "launch",
"mode": "exec",
"remotePath": "",
"port": 2345,
"host": "127.0.0.1",
"program": "${workspaceRoot}/BinaryName",
"env": {},
"args": [],
"showLog": true,
"preLaunchTask": "buildBinWithTag"
}
]
}
原始问题:我正在使用构建代码编译Go程序的不同版本,并使用&#34进行编译;去构建-tags THISISAFLAG"
//+build THISISAFLAG
package main
这完美无缺。但有没有办法告诉调试器使用这些标志。我尝试使用如下的启动配置,但它没有用。
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"remotePath": "",
"port": 2345,
"host": "127.0.0.1",
"program": "${fileDirname}",
"env": {},
"args": ["-flags THISISAFLAG"],
"showLog": true
}
]
}
答案 0 :(得分:1)
您可以将预构建的二进制文件附加到调试器。
go build -o myapp.exe -tags THISISAFLAG
将配置Launch Exe
添加到launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Debug", //existing config
"type": "go",
"request": "launch",
"mode": "debug",
"remotePath": "",
"port": 2345,
"host": "127.0.0.1",
"program": "${fileDirname}",
"env": {},
"args": [],
"showLog": true
},
{
"name": "Launch EXE", //added config
"type": "go",
"request": "launch",
"mode": "exec",
"remotePath": "",
"port": 2345,
"host": "127.0.0.1",
"program": "${workspaceRoot}/myapp.exe",
"env": {},
"args": [],
"showLog": true
}
]
}
注意:强>
由于编译器优化和this issue,在调试会话期间,某些变量可能无法显示或显示不同的名称(参见下文)。将来,您可以在构建应用程序时添加-gcflags='-N -l'
以禁用编译器优化。
答案 1 :(得分:0)
Visual Studio Code Go plugin现在支持名为launch.json
的{{1}}键,该键允许您使用相应的值buildFlags
指定构建标签。 (似乎有a bug disallowing multiple tags。)
相关excerpt from the plugin Wiki:
如果您的构建需要构建标签(例如,去构建-tags what_tag),则添加内容为“ -tags what_tag”的参数buildFlags。
如果您有不同的构建配置,而每个构建配置都需要各自的构建标签,则可以为每个构建配置创建单独的启动配置。
答案 2 :(得分:0)
这是我的测试配置:
{
"name": "Delve: Test",
"type": "go",
"request": "launch",
"mode": "test",
"buildFlags": "-tags 'unit_tests integration_tests all_tests'",
"program": "${file}",
"showLog": true
}
"${file}"
更改为 "${fileDirname}"
,如果您使用后者,则至少其中一个文件应具有上述标签。