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 模式)以进行本地调试!
我们将此中介称为调试适配器(或简称 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
- 1 回答
- 0 关注
- 254 浏览
添加回答
举报