繁体   English   中英

如何使用 VSCode 远程调试 Go 代码

[英]How to remotely debug Go code with VSCode

我在需要调试的 docker 容器中运行一个进程。 该过程通过dlv debug /go/src/path/to/package --headless --listen=:2345 --log在 docker 的入口点中启动,以便稍后在 VSCode 中启用调试。

docker run --rm -it -p 2345:2345 my_image:tag容器通过docker run --rm -it -p 2345:2345 my_image:tag 注意 delve 的端口是公开的。

在 VSCode 中,我将launch.json定义如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach remote",
            "type": "go",
            "request": "attach",
            "mode": "remote",
            "port": 2345,
            "host": "127.0.0.1",
            "apiVersion": 1
        }
    ]
}

启动“附加远程”VSCode 调试配置后,我得到在此处输入图片说明

它不是很清楚,但该 UI 使我相信我现在已连接到远程无头调试器并准备进行调试。 我定义了一个断点,我知道它会被我可以发送远程进程的请求击中。 我发出那个请求,得到结果,断点一直没有命中,说明我还没有实现远程调试。

我的 VSCode“附加远程”配置有问题吗? 我可以使用dlv connect :2345进行命令行调试,实际上调试远程进程就好了,这表明无头服务器可以正常工作。 我宁愿在 VSCode 中使用源代码进行调试。

最新的vscode-go测试版(2020年4月)再试一次(2020年4月之后的任何时候,最新的官方vscode-go版本就足够了)

Microsoft/vscode-go issue 2010包含来自Ramya Rao 的确认:

#3108 中的修复在此扩展的最新测试版中可用。 请尝试并分享反馈
最新版本的扩展现在已经修复了这个问题

和:

我可以确认我现在可以使用 AWS SAM 来触发断点,以使用从 Windows 编译的 delve 和 go 二进制文件启动 linux 容器。

对于仍然有此问题的任何人(就像我在编辑此评论之前一样),请注意 launch.json 的“remotePath”元素是在本地系统(而不是容器)上编译的源文件的绝对路径
如上所述 -它是在您编译二进制文件时添加到 DWARF 编译单元文件表的绝对本地路径

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM