如何在VSCode中为特定的.go文件创建调试配置?

How to create a debug configuration for a specific .go file in VSCode?

提问人:aybe 提问时间:11/17/2023 更新时间:11/17/2023 访问量:27

问:

目前,必须首先在编辑器中将文件聚焦到调试,然后按 F5 键开始调试。.go

我想要的是能够按 F5 开始调试,但不必先关注编辑器。main.go

这是 VSCode 生成的库存配置,必须在 F5 之前对焦文件:.go

    {
        "name": "Launch Package",
        "type": "go",
        "request": "launch",
        "mode": "auto",
        "program": "${fileDirname}",
    }

试图指定并让它开心:programcwd

    {
        "name": "Launch Package",
        "type": "go",
        "request": "launch",
        "mode": "auto",
        "program": "${workspaceFolder}/cmd/sym_dump/main.go",
        "cwd": "${workspaceFolder}/cmd/sym_dump",
    }

但是,这不起作用,它抱怨找不到的功能:

Starting: C:\Users\aybe\go\bin\dlv.exe dap --listen=127.0.0.1:49541 from C:\GitHub\psx_mnd_sym/cmd/sym_dump
DAP server listening at: 127.0.0.1:49541
Build Error: go build -o C:\GitHub\psx_mnd_sym\cmd\sym_dump\__debug_bin2780105186.exe -gcflags all=-N -l .\main.go
# command-line-arguments
.\main.go:340:13: undefined: dumpTypes
.\main.go:344:14: undefined: dumpSourceFiles
.\main.go:348:14: undefined: dumpDecls
.\main.go:357:13: undefined: dumpTypes
.\main.go:365:13: undefined: dumpIDAScripts
.\main.go:380:13: undefined: dumpTypes (exit status 1)

实际函数位于与 相同的目录中的另一个文件中。.goprogram

这两个文件都在它们之上指定了。package main

在这种情况下,如何为特定文件创建调试配置?.go

转到 visual-studio-code 调试 vscode-debugger

评论


答:

1赞 Zeke Lu 11/17/2023 #1

将属性指定为目录:program

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Package",
      "type": "go",
      "request": "launch",
      "mode": "auto",
      "program": "${workspaceFolder}/cmd/sym_dump"
    }
  ]
}

${fileDirname}当前打开的文件的文件夹路径。默认模板使用 而不是 (由模板使用) 是有原因的。Launch Package${fileDirname}${file}Launch file

让我们先看一下文档dlv debug

概要

...

默认情况下,在不带参数的情况下,Delve 将在当前目录中编译“main”包,并开始对其进行调试。或者,可以指定包名称,Delve 将改为编译该包,并开始新的调试会话。

dlv debug [package] [flags]

关于 的信息不多。让我们转向文档packagego run

编译并运行 Go 程序

用法:

go run [build flags] [-exec xprog] package [arguments...]

Run 编译并运行命名的主 Go 包。通常,包被指定为来自单个目录的 .go 源文件列表,但它也可能是导入路径、文件系统路径或与单个已知包匹配的模式,如“go run .”或“go run my/cmd”。

如果我们将属性指定为 ,则表示包包含单个文件 ()。但事实是,该包包含另一个定义 、 等的文件。这就是它无法构建程序的原因。program${workspaceFolder}/cmd/sym_dump/main.gomain.godumpTypesdumpSourceFiles

顺便说一句,由于“如果省略 cwd 或为空,则程序文件夹用作工作目录”(请参阅 Launch.json 属性),因此您无需设置该属性。cwd