猿问

在 VSCode 中调试 Golang 但输出路径错误

我在 VSCode 中编写了一个程序,项目路径在D:\myapp. 而我“ F5”来调试。
通常,我会__debug_bin在我的项目文件夹中获得一个文件名“”。

上周,我更新了 VSC 并重新安装了所有工具(dlv或其他东西)。
我得到一个新的调试文件“ __debug_bin1167246115.exe”。
但是我的项目文件夹中没有输出文件,绝对路径是“ C:\Users\xxx\AppData\Local\Temp\__debug_bin1167246115.exe”。

问题是:
我需要调试文件输出并在我的项目根文件夹中运行;我怎样才能做到这一点?

  • VS 代码版本:1.62.3(用户设置)

  • Golang 版本:1.17.3

  • 启动.json:

    "version": "0.2.0",

    "configurations": [

        {

            "name": "Launch Package",

            "type": "go",

            "request": "launch",

            "mode": "auto",

            "program": "${workspaceFolder}/",

            "cwd": "${workspaceFolder}/",


        }

    ]

}


慕后森
浏览 255回答 1
1回答

萧十郎

上周(2021 年 11 月结束),我更新了 VSC 并重新安装了所有工具(dlv或其他工具)。我得到一个新的调试文件“ __debug_bin1167246115.exe”。VSCode 调试文档提到了最近(2021 年第四季度)的更改Go 扩展允许您启动或附加到 Go 程序以进行调试。您可以使用VS Code 的 Debugging UI检查变量和堆栈、设置断点以及执行其他调试活动。使用Go 调试器Delve可以实现这些调试功能。Go 扩展一直通过自定义调试适配器程序(传统模式)与 Delve 通信。随着新 Delve 的本机 DAP 实现变得可用,Go 扩展正在过渡以跳过旧版调试适配器并直接与 Delve 通信以进行本地调试。📣 我们很高兴地宣布,现在默认启用 Delve 集成的新模式(dlv-dap 模式)以进行本地调试!注意:DAP表示此处显示的“调试适配器协议” :我们将此中介称为调试适配器(或简称 DA),DA 和 VS 代码之间使用的抽象协议是调试适配器协议(简称 DAP)。由于调试适配器协议独立于 VS Code,因此它有自己的网站,您可以在其中找到介绍和概述、详细规范以及一些包含已知实现和支持工具的列表。这篇博文解释了 DAP 的历史和背后的动机。作为这个新的 DAP 支持的一部分,您有提交 fa10cec,它首先尝试创建一个临时文件,然后再回退到您所知道的:// Default output file pathname for the compiled binary in debug or test modes// when temporary debug binary creation fails.// This is relative to the current working directory of the server.const defaultDebugBinary string = "./__debug_bin"func (s *Session) tempDebugBinary() string {    binaryPattern := "__debug_bin"    if runtime.GOOS == "windows" {        binaryPattern = "__debug_bin*.exe"    }    f, err := ioutil.TempFile("", binaryPattern)    if err != nil {        s.config.log.Errorf("failed to create a temporary binary (%v), falling back to %q", err, defaultDebugBinary)        return cleanExeName(defaultDebugBinary)    }    ...}This is [called by][6]:```go    // Prepare the debug executable filename, building it if necessary    debugbinary := args.Program    if args.Mode == "debug" || args.Mode == "test" {        if args.Output == "" {            args.Output = s.tempDebugBinary()        } else {            args.Output = cleanExeName(args.Output)        }        args.Output, err = filepath.Abs(args.Output)所以尝试在launch.json attributesoutput中设置标志,或者使用键值。 将其设置为。dlvFlagsoutput./__debug_bin
随时随地看视频慕课网APP

相关分类

Go
我要回答