当前位置: 首页 > 面试题库 >

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

楚举
2023-03-14
问题内容

答: 基于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'在构建应用程序时添加禁用编译器优化的功能。

在此处输入图片说明



 类似资料:
  • 目前Go语言支持GDB、LLDB和Delve几种调试器。其中GDB是最早支持的调试工具,LLDB是macOS系统推荐的标准调试工具。但是GDB和LLDB对Go语言的专有特性都缺乏很大支持,而只有Delve是专门为Go语言设计开发的调试工具。而且Delve本身也是采用Go语言开发,对Windows平台也提供了一样的支持。本节我们基于Delve简单解释如何调试Go汇编程序。 3.9.1 Delve入门

  • 问题内容: 我正在使用 “ go test -v ”运行一堆单元测试。我想用delve调试它们。当我尝试运行调试器时,出现 “无法调试非主程序包” 错误。因此,如何使用delve调试器调试单元测试? 问题答案: 用途: 您还可以通过选择要运行的测试(就像)。 在内部,这与Flimzy的答案相同(它使用编译测试二进制文件),但更加精简,不会留下.test文件供您清理。

  • 我需要在VsCode上调试我的反应原生应用程序,我是新的反应原生开发...:)我搜索并遵循不同的方法,但没有运气...:(首先,我遵循此方法https://medium.com/@Tunvirrahmantushs/react-nate-debug-with-vscode-in-imple-steps-bf39b6331e67并遵循此方法https://www.youtube.com/watch?

  • 我无法对WebStorm中的TypeScript文件进行远程调试。我目前使用的是WebStorm 6.0、TS编译器0.8.3和Chrome JetBrains插件0.5.7。 出于调试的目的,我所使用的服务器是一个简单的python服务器,使用命令在我的本地计算机上与源文件位于同一目录中。

  • 在最近的vscode版本中,python扩展现在使用debugpy作为默认的Python调试器,取代了旧的ptvsd。 我需要在一个软件程序中调试一个python脚本,该程序适用于python 3.2,而不适用于较新的版本。不幸的是,debugpy只适用于python 有没有办法在vscode python扩展中使用另一个调试器,或者选择使用哪个调试器?换句话说,是否可以调试python

  • 这首先与这篇文章高度相关->如何在Dataflow中进行这种类型的测试(在twitter上称为功能测试)? 我们在生产中有一些类似的代码 这是编写可调试的Apache-Beam/Dataflow代码的最佳方式吗?我们可以逐步通过这些代码并轻松地看到我们的bug在哪里? 是否有其他方法可以方便地调试它,因为我怀疑在应用stuff时,“真正的执行”发生在该方法之后? 谢谢,迪恩