登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-18 13:46:44 195浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《在 Visual Studio Code 和 Delve 调试器中使用标签调试 Go》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

答: 根据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
    }
  ]
}

正确答案

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

  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'在构建应用程序时添加禁用编译器优化。

在此处输入图像描述

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《在 Visual Studio Code 和 Delve 调试器中使用标签调试 Go》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>