目前,必须首先在编辑器中聚焦.go
文件进行调试,然后按F5键开始调试。
我想要的是,能够按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)
型
实际的函数位于与program
相同目录下的另一个.go
文件中。
这两个文件都在其顶部指定了package main
。
在这种情况下,如何为特定的.go
文件创建调试配置?
1条答案
按热度按时间3phpmpom1#
将
program
属性指定为目录:字符串
${fileDirname}
是当前打开的文件的文件夹路径。默认的Launch Package
模板使用${fileDirname}
而不是${file}
(Launch file
模板使用${file}
)是有原因的。让我们先看看
dlv debug
的文档:简介
...
默认情况下,没有参数,Delve将编译当前目录中的“main”包,并开始调试它。或者,您可以指定一个包名称,Delve将编译该包,并开始一个新的调试会话。
型
关于
package
的信息不多。让我们转向go run
的文档:编译运行Go程序
使用方法:
型
Run编译并运行命名的主Go包。通常包被指定为来自单个目录的.go源文件列表,但它也可以是导入路径,文件系统路径或匹配单个已知包的模式,如'go run .'或'go run my/zh'。
如果我们将
program
属性指定为${workspaceFolder}/cmd/sym_dump/main.go
,这意味着该软件包包含单个文件(main.go
)。但事实是,该软件包包含另一个定义dumpTypes
,dumpSourceFiles
等的文件。这就是为什么它无法构建程序。顺便说一句,由于“如果cwd被省略或为空,程序文件夹将用作工作目录”(参见Launch.json属性),因此您不需要设置
cwd
属性。