为什么在具有端口转发的容器中的远程调试会话期间,“dlv connect”会导致“命令失败:连接已关闭”?

Why does 'dlv connect' result in 'Command failed: connection is shut down' during remote debugging session in a container with port-forwarding?

提问人:user21980941 提问时间:5/30/2023 最后编辑:Taimoor Mirzauser21980941 更新时间:6/1/2023 访问量:156

问:

dlv connect 导致命令失败:连接已关闭

我想远程连接到 delve(Go 调试器),并在容器中为进程运行调试会话。但是当我进行 dlv 连接时,它需要很长时间才能连接,但一旦连接,端口转发连接就会丢失,并使连接的调试会话变得无用。

  • 您使用的是哪个版本的 Delve(dlv 版本)?版本: 1.20.2
  • 你用的是哪个版本的 Go?(去版)?GO1.20.1 Linux/AMD64
  • 您使用的是什么操作系统和处理器架构?具有 ubuntu/bionic64 的 VM
  • 你做了什么?

我已经深入研究了一个容器并进行了端口转发以从主机进行调试。当我发出命令时,这需要很长时间才能显示:dlv connect localhost:40000 --api-version=2 --log

Type 'help' for list of commands. 

DLV 端口转发显示以下输出:

Handling connection for 40000 E0529 05:04:24.566631    7075 portforward.go:409] an error occurred forwarding 40000 -> 40000: error forwarding port 40000 to pod 10b0190afd8de916d3574fe2a020652c7d40e9bae7a64041f223f09bf830457c, uid : failed to execute portforward in network namespace "host": failed to connect to localhost:40000 inside namespace "10b0190afd8de916d3574fe2a020652c7d40e9bae7a64041f223f09bf830457c", IPv4: dial tcp4 127.0.0.1:40000: connect: cannot assign requested address IPv6 dial tcp6: address localhost: no suitable address found error: lost connection to pod

因此,调试会话中的任何其他命令都会导致命令失败:连接已关闭 例如:

dlv connect localhost:40000 --api-version=2 --log Type 'help' for list of commands. (dlv) list main.main Command failed: connection is shut down (dlv) bp Command failed: connection is shut down (dlv) q connection is shut down

你期待看到什么? 远程调试运行顺利。预计不会丢失连接。

你看到了什么? 命令失败:连接已关闭 无法执行调试。

我的容器包含以下命令:

CMD ["/dlv", "--listen=:40000", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "/usr/local/bin/app"]

我怎样才能解决这个问题,以便有一个顺利的远程调试会话?

kubernetes dockerfile 容器 portforwarding delve

评论

0赞 tradetree 6/12/2023
我不确定这是否相关,但我开始使用 dlv 版本 1.20.2,并且在 goland IDE 中连接时出现间歇性失败。在 IDE 外部,它连接。我怀疑 dlv 1.20.2 有问题,我会把票交给 goland 技术支持: /opt/goland/plugins/go-plugin/lib/dlv/linux/dlv --listen=127.0.0.1:44417 --headless=true --api-version=2 --check-go-version=false --only-same-user=false exec /home/daniel/git/accounting-service/go_build_main --

答: 暂无答案