首页 > 解决方案 > 使用 Go 和 GoLand IDE 远程调试 HTTP 请求

问题描述

我是新手,深入研究和 GoLand IDE。我想远程调试一些使用 docker 部署make和运行的 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

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

提前致谢

标签: dockergojetbrains-idedelvegoland

解决方案


此命令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 显示您可以单独编译二进制文件,以防您需要更大的灵活性,然后启动调试器。请记住,添加-gcflags='-N -l'或非常重要-gcflags='all=-N -l',具体取决于您拥有的 Go 版本,以便调试器能够获得有关您的应用程序的更多可用数据。

至于:

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

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

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


推荐阅读