go - 如何使用 VSCode 远程调试 Go 代码
问题描述
我在需要调试的 docker 容器中运行一个进程。该过程在 docker 的入口点 via
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
}
]
}
这不是很清楚,但那个 UI 让我相信我现在已连接到远程无头调试器并准备调试。我定义了一个断点,我知道它会被我可以发送远程进程的请求击中。我发送那个请求,我得到了一个结果,那个断点从来没有命中,说明我还没有实现远程调试。
我的 VSCode“附加远程”配置有问题吗?我可以使用命令行调试dlv connect :2345
并实际调试远程进程,这表明无头服务器正常工作。我宁愿在 VSCode 中使用源代码进行调试。
解决方案
使用最新的 vscode-go 测试版(2020 年 4 月)重试(2020 年 4 月之后的任何时间,最新的官方 vscode-go 版本就足够了)
Microsoft/vscode-go
2010 年的问题包括来自Ramya Rao的确认:
#3108的修复可在此扩展的最新 beta 版本中使用。请尝试并分享反馈
最新版本的扩展现在已修复此问题
和:
我可以确认我现在可以使用 AWS SAM 来启动一个带有从 Windows 编译的 delve 和 go 二进制文件的 linux 容器。
对于仍然遇到此问题的任何人(就像我在编辑此评论之前一样),请注意您的 launch.json 的“remotePath”元素是在本地系统(而不是容器)上编译的源文件的绝对路径。
正如上面所暗示的 -它是在您编译二进制文件时添加到 DWARF 编译单元文件表中的绝对本地路径。
推荐阅读
- ios - 如何获取 iOS 应用商店评论页面的 URL
- vue.js - 单击按钮后选择未设置的值
- php - 创建订单时无法解析 http xml 响应
- flutter - 颤动中所有背景页面的单一颜色
- android - 如何使 recyclerView 在 android 约束布局中占据屏幕的一半(最大)?
- javascript - Vuetify 数据表(v-data-table) - 如何有条件地设置某些列中的值
- typescript - 从泛型返回值时使用提取
- excel - Excel - 将表格转换为不同的格式
- r - 如何解决 Rscript 解析错误:过早的 EOF?
- ios - TabBar 的背景颜色没有使用 ESTabBarController 改变