我正在为 Windows 10 使用 vscode(1.34.0 内部人员和稳定版本)开发 Go(1.12.0)api 服务器。源代码位于 Windows 机器上定义的 %GOPATH% 中。Delve(dlv.exe - 1.2.0 版)也安装在 %GOPATH%\bin 中,%GOPATH%\bin 也安装在 Windows %PATH% 中。
然后使用 docker-compose 在 Docker(Docker 桌面版本 2.0.0.3 (31259))容器中构建 go 应用程序(因为其他一些服务,如数据库和网络服务器正在其他容器中运行)。然后将最终的 go app 二进制文件与 delve 可执行文件一起复制到 Alpine-Linux 容器中,并且 delve 服务器以无头模式启动。没有源代码被复制到 Alpine-Linux 容器,只有二进制文件。
我还没有设法通过此设置在 vscode 中正确设置远程调试。调试器确实启动了我的应用程序,但任何断点都会立即变灰并变为“未验证”。当应用程序(api 服务器)运行时,它们也不会被命中。
使用 Jetbrains 的 Goland IDE 进行远程调试时,使用此设置进行调试非常有效(调试器启动,可以设置断点并命中)。
在过去的几天里,我试图找到一个解决方案,在 Chrome 调试、Node.js 调试等方面找到了类似问题的论坛帖子,以及这篇关于 Go 的帖子,特别是:
我还找到了这个示例配置:
https://github.com/lukehoban/webapp-go/blob/debugging/.vscode/launch.json
我认为我遇到的主要问题是,我在任何地方都找不到任何示例,说明如何为 Windows 机器上的远程调试配置正确设置 launch.json 中的程序路径(我也找不到任何涉及此内容的文档)。源代码仅在 GOPATH 中的 Windows 机器上,而不是在应用程序和 delve 运行的最终容器中(这同样适用于 Goland 调试器)
我的项目路径/目录结构(简化):
%GOPATH%\github.com\myuser\project_dir\
.vscode\
launch.json
cmd\ …Run Code Online (Sandbox Code Playgroud)