提问人:aybe 提问时间:11/17/2023 更新时间:11/17/2023 访问量:27
如何在VSCode中为特定的.go文件创建调试配置?
How to create a debug configuration for a specific .go file in VSCode?
问:
目前,必须首先在编辑器中将文件聚焦到调试,然后按 F5 键开始调试。.go
我想要的是能够按 F5 开始调试,但不必先关注编辑器。main.go
这是 VSCode 生成的库存配置,必须在 F5 之前对焦文件:.go
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}",
}
试图指定并让它开心:program
cwd
{
"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)
实际函数位于与 相同的目录中的另一个文件中。.go
program
这两个文件都在它们之上指定了。package main
在这种情况下,如何为特定文件创建调试配置?.go
答:
将属性指定为目录: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]
关于 的信息不多。让我们转向文档:package
go 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.go
main.go
dumpTypes
dumpSourceFiles
顺便说一句,由于“如果省略 cwd 或为空,则程序文件夹用作工作目录”(请参阅 Launch.json 属性),因此您无需设置该属性。cwd
评论