docker - 使用 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 上运行,我有没有办法附加到我的项目?如果是这种情况,这些命令会有什么不同?
提前致谢
解决方案
此命令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>
.
几个月前我们发表了一篇专门针对这个问题的文章,请查看它以获得更详细的回复。
推荐阅读
- or-tools - Or-tools cp_sat求解器结果不一致
- javascript - 当我使用 laravel/ui 时插入的脚本不起作用
- reactjs - 当属性名称可以变化时解构
- c# - 如何将excel数据从openxml worksheetpart.worksheet c#中获取到GetBytes的数组中
- visual-studio-code - VS Code TypeScript 自动导入建议优先级
- smartsheet-api - 在 Swift 中使用 Smartsheet API
- java - 如何创建组合框按钮
- javascript - 在 React Native 中有条件地渲染图标
- android - API 19 上的惰性导致的应用程序崩溃
- sql - Postgresql 字符串到 jsonb_each_text()