vtm*_*m11 5 go visual-studio-code
考虑调试以下代码:
package main
import "os"
func main() {
os.Args = append(os.Args, "help")
}
Run Code Online (Sandbox Code Playgroud)
为了使用命令行参数测试它,我创建了 launch.json,如下所示:
{
"version": "0.2.0",
"configurations": [
{
"name": "Test args",
"type": "go",
"request": "launch",
"mode": "test",
"program": "${file}",
"env": {},
"args": ["-test.v","--","arg1","arg2","arg3"]
}
]
}
Run Code Online (Sandbox Code Playgroud)
当我从 VS Code 中的“运行”和“调试”运行“测试参数配置”时,收到一条错误消息
启动失败:无法启动进程:打开/mypath/__debug_bin:没有这样的文件或目录
此错误是因为由于某种原因 dlv 无法从 VS Code 下创建“中间”二进制文件 __debug_bin。
但是,当我直接从命令行运行 dlv 时
dlv 调试 -- arg1 arg2 arg3
它按预期工作,在 /mypath 目录中创建 __debug_bin ,并且所有进一步的调试功能(设置断点、单步执行/进入、打印变量等)都可用。
此外,如果我首先从命令行运行 dlv debug(从而创建 __debug_bin),然后(不退出 dlv)切换到 VS Code 并从运行和调试运行测试参数,它也可以工作。这意味着 VS Code(以及幕后某处的 dlv)捕获此 __debug_bin 并使用它进行调试。
因此,问题在于 dlv 在从 VS Code 上下文调用时无法构建 __debug_bin。
请告知我该如何解决这个问题?
编辑。发生问题的原因是我的 launch.json 文件中使用了错误的“mode”和“args”参数。正确的调试配置如下所示:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch file",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${file}",
"env": {},
"args": ["--","arg1","arg2","arg3"]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我将“模式”从“测试”更改为“自动”,并从“args”中删除了“-test.v”标志。在“args”中使用“mode”:“test”和“-test.v”进行配置适用于测试场景。比如说,当我有 main_test.go 和 main.go 时,我想调试 main_test.go。如果我调试“正常”(不是“测试”)go 文件,我需要按所述调整 launch.json。
| 归档时间: |
|
| 查看次数: |
1545 次 |
| 最近记录: |