dlv 在 VSCode 下构建 __debug_bin 失败

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。