首页  >  文章  >  后端开发  >  如何使用 VS Code 调试 Go 单元测试中冲突的 Protobuf 扩展?

如何使用 VS Code 调试 Go 单元测试中冲突的 Protobuf 扩展?

Barbara Streisand
Barbara Streisand原创
2024-10-27 06:52:29825浏览

How can I debug conflicting Protobuf extensions in Go unit tests using VS Code?

使用标志运行和调试单元测试:解决冲突的 Protobuf 扩展

在 VS Code 中调试单元测试时,可能需要通过用于解决 Protobuf 扩展冲突的附加标志。本指南提供了此问题的解决方案,允许无缝调试。

VS Code settings.json 中的原始配置尝试添加所需的标志 '-ldflags "-X google.golang.org/protobuf/reflect /protoregistry.conflictPolicy=警告"'。但是,当 VS Code 生成标记周围带有单引号的测试命令时,此配置会遇到问题。

要解决此问题,需要调整 settings.json 中的配置。修改应删除标志值周围的单引号:

"go.testFlags": [
    "-ldflags",
    "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn"
]

通过此修改,VS Code 将生成一个测试命令,该命令正确包含必要的标志,而不会导致与 proto 扩展冲突相关的错误。

对于调试,由于使用 VS Code 界面调试特定测试的复杂性,建议采用不同的方法。使用特定标志编译测试二进制文件并利用 dlv 进行无头调试可以实现更好的控制和高效调试。

要编译测试二进制文件:

go test -c -ldflags "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn" -gcflags="all=-N -l"

此命令生成具有所需的二进制文件用于调试的标志。要以无头模式连接 dlv 以进行编辑器连接:

dlv exec ./foo.test --headless --listen=:2345 --log --api-version=2 -- -count=1 -- $(pwd)/some/path

这里,foo.test 是生成的二进制文件,-count=1 表示用于测试的自定义标志,$(pwd)/some/path 可以是用于黄瓜式测试。将编辑器连接到 dlv 会话并开始调试。

其他信息

Go 还提供了通过内联标志启动 dlv 的便捷方法,对于 Vim 用户来说,vim -go 插件允许使用以下命令进行自定义断点设置和 dlv 连接:GoDebugConnect 127.0.0.1:2345。通过遵循上述步骤,开发人员可以有效地运行和调试带标志的单元测试,确保测试和代码维护的顺利进行。

以上是如何使用 VS Code 调试 Go 单元测试中冲突的 Protobuf 扩展?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn