[英]How to set Go debug flag in vscode and know if you are running in debug
[英]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
}
]
}
它不是很清楚,但该 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.