一尘不染

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

go

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

阅读 209

收藏
2020-07-02

共1个答案

一尘不染

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

  1. 从命令行构建应用程序,例如 go build -o myapp.exe -tags THISISAFLAG
  2. 将配置添加Launch Exelaunch.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'在构建应用程序时添加禁用编译器优化的功能。

在此处输入图片说明

2020-07-02