为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕后森 2022-10-17 15:57:10
我在 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}/",        }    ]}
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

上周(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表示此处显示的调试适配器协议” :

//img1.sycdn.imooc.com//634d0af70001951706560227.jpg

我们将此中介称为调试适配器(或简称 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


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信