使用 Go 和 GoLand IDE 远程调试 HTTP 请求

Big*_*Bug 1 jetbrains-ide go docker delve goland

我是新手,深入研究和 GoLand IDE。我想远程调试一些make使用 docker部署和运行的REST 端点(使用 docker + docker-compose)。

我用来调出我的环境的命令是 make myproject

我的端点托管在: localhost:8080

在 GoLand 中创建调试配置时,它指定在运行之前执行 dlv debug --headless --listen=:2345 --api-version 2以下操作:

go build -gcflags='-N -l' github.com/myproject
dlv --listen=:2345 --headless=true --api version=2 exec ./myproject
Run Code Online (Sandbox Code Playgroud)

一旦它在 localhost:8080 上运行,我有没有办法附加到我的项目?如果是这种情况,这些命令会有什么不同?

提前致谢

dls*_*per 5

此命令dlv debug --headless --listen=:2345 --api-version 2 your/package/name允许 delve 编译包,然后启动自身和编译后的二进制文件。

另一方面,这些命令 go build -gcflags='-N -l' github.com/myproject dlv --listen=:2345 --headless=true --api version=2 exec ./myproject 表明您可以单独编译二进制文件,以防您需要更大的灵活性,然后启动调试器。请记住,根据您拥有的 Go 版本,添加-gcflags='-N -l'或非常重要-gcflags='all=-N -l',以便调试器能够获得有关您的应用程序的更多数据。

至于:

一旦它在 localhost:8080 上运行,我有没有办法附加到我的项目?如果是这种情况,这些命令会有什么不同?

这取决于您在哪里运行该过程。如果它直接在你的机器上,没有虚拟机或容器,那么 IDE 有Run|Attach to Process. 如果该进程在另一台机器上运行,则您需要登录该机器并使用dlv --headless --listen=:2345 --api-version 2 attach <pid>.

几个月前我们发表了一篇专门讨论这个问题的文章,请查看它以获得更详细的回复。