调试使用Visual Studio Code和Delve调试器中的标记

时间:2017-04-24 07:20:33

标签: debugging go visual-studio-code

答案: 基于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
    }
  ]
}

3 个答案:

答案 0 :(得分:1)

您可以将预构建的二进制文件附加到调试器。

  1. 从命令行构建应用程序,例如go build -o myapp.exe -tags THISISAFLAG
  2. 将配置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
        }
      ]
    } 
    
  3. 注意:

    由于编译器优化和this issue,在调试会话期间,某些变量可能无法显示或显示不同的名称(参见下文)。将来,您可以在构建应用程序时添加-gcflags='-N -l'以禁用编译器优化。

    enter image description here

答案 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
}
  1. 除非所选文件中不存在标签,否则它将不断出错。
  2. 您可能希望根据您的用例将 "${file}" 更改为 "${fileDirname}",如果您使用后者,则至少其中一个文件应具有上述标签。