【问题标题】:How to remotely debug Go code with VSCode如何使用 VSCode 远程调试 Go 代码
【发布时间】:2020-04-26 08:53:19
【问题描述】:

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

docker 容器通过以下方式启动 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 中使用源代码进行调试。

【问题讨论】:

    标签: go visual-studio-code vscode-debugger delve


    【解决方案1】:

    使用latest beta of vscode-go(2020 年 4 月)再试一次(2020 年 4 月之后的任何时间,最新的官方 vscode-go 版本就足够了)

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

    来自#3108 的修复程序在此扩展程序的最新测试版中可用。请尝试并分享反馈
    最新版本的扩展现已修复此问题

    还有:

    我可以确认我现在可以使用 AWS SAM 来运行一个 linux 容器,该容器带有从 Windows 编译的 delve 和 go 二进制文件。

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

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 2019-07-07
      • 2018-07-11
      • 1970-01-01
      • 2022-11-15
      • 2019-03-28
      • 2020-01-17
      • 2021-08-10
      • 2020-02-09
      相关资源
      最近更新 更多