答: 基于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程序的不同版本,并使用“ go build -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 } ] }
您可以将预构建的二进制文件附加到调试器。
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 } ] }
注意:
由于编译器的优化和此问题,在调试会话期间,某些变量可能不会显示或以不同的名称显示(请参阅下文)。将来,您可能会-gcflags='-N -l'在构建应用程序时添加禁用编译器优化的功能。
-gcflags='-N -l'