Goland使用delve进行远程调试

网上给出的使用delve进行远程调试,都需要先在本地交叉编译或者在远程主机上编译出可运行的程序,然后再用delve在远程启动程序,最后要在goland中配remote debug,然后启动remote debug连接远程的delve进行调试。

本教程会将上面的步骤简化为只需要两步,(1)在远程运行程序(2)在本地启动调试。

调试的效率和方便程度都会很大提高。

一、安装软件

(1)本地安装go 1.22.2 和goland 2023.3.7

这步骤就省略了,默认已经安装了。

(2)远程主机上安装 delve 最新版 和go 1.22.5

安装go的方法可以参考官网https://go.dev/doc/install给出的教程。

安装delve的最新版本使用下面的命令:

$ go install github.com/go-delve/delve/cmd/dlv@latest

二、本地goland配置run target

在Run -> Manage Targets中增加新的运行目标机器。

在这里插入图片描述
在这里插入图片描述

配置源文件目录和编译后文件的输出目录。

在这里插入图片描述

在运行配置配置里面设置运行target为上述配置的target。

在这里插入图片描述
在这里插入图片描述

设置的编译参数为:-o PlatformGateway -gcflags "all=-N -l"

接下来要在Before launch中配置启动远程主机上的dlv。
在这里插入图片描述

在这里插入图片描述

再次点击加号增加远程外部工具运行。
在这里插入图片描述
在这里插入图片描述

给dlv传递的参数为:--listen=:2345 --headless=true --api-version=2 --accept-multiclient exec PlatformGateway

最后的PlatformGateway是输出文件的名称,在配置go tools argiments时指定的。

三、配置远程debug

点击Run -> Edit Configurations
在这里插入图片描述

增加远程调试选项,之前给出的配置参数也是从这个页面来的。
在这里插入图片描述

四、进行远程调试

1、启动远程dlv,并运行目标程序。选择图示中的选项,然后点击右侧的三角运行按钮。

在这里插入图片描述

2、观察运行窗口出现如下提示。
在这里插入图片描述

3、在程序中打断点。

4、启动远程debug。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看到程序已经在断点上停住了。

五、总结

通过本文的设置,进行远程调试的时候只需要点击启动运行按钮,然后再点击debug按钮,就可以进行远程调试了,比网上大多数的教程都要便捷和方面,可以提高调试的效率和体验。

深刻的体会到了“工欲善其事必先利其器”,对goland的使用又有了进一步的了解。

### Goland 调试功能失效解决方案 当遇到 Goland调试功能失效的情况时,可以尝试以下几个方法来解决问题。 #### 1. 更新 Go 版本和 IDE 插件 如果最近更新了 Go 到最新版本(如提到的 1.23),可能会导致兼容性问题。建议确认当前使用GoLand 是否支持该版本的 Go 编译器[^1]。 同时也应确保所有插件都是最新的稳定版。 #### 2. 配置 Delve 工具链 对于某些特定平台上的用户来说,配置正确的 delve 设置可能是必要的。例如,在 M1 MacBook 上曾有报告指出通过安装适用于 ARM 架构的 delve 可以解决无法正常工作的 debug 功能[^3]。 使用命令 `go install github.com/go-delve/delve/cmd/dlv@latest` 来获取最新版本的 delve 并将其路径加入环境变量中。 #### 3. 清理缓存并重启项目 有时简单的清理操作也能有效恢复调试模式下的断点响应情况。关闭 Goland ,删除 `.idea` 文件夹以及项目的构建目录后再重新打开工程可能有助于排除一些临时性的错误状态[^2]。 ```bash rm -rf .idea/ rm -rf ./build/ ``` #### 4. 修改编译选项 调整编译参数也可能帮助改善这一状况。可以在 Run/Debug Configurations 对话框中的 Build Tags 和 Env Variables 字段里添加 `-gcflags="all=-N -l"` 参数,这会禁用内联优化从而使得设置的断点更可靠地触发。 ```json { "env": {}, "args": [], "program": "${workspaceFolder}/main.go", "dlvLoadConfig": { "followPointers": true, "maxVariableRecurse": 1, "maxStringLen": 64, "maxArrayValues": 64, "maxStructFields": -1 }, "mode": "debug", "processArgs": null, "apiVersion": 2, "showLog": false, "trace": false, "callTrace": false, "gcFlags": "-N -l" } ``` #### 5. 检查防火墙和其他安全软件的影响 部分情况下,本地或公司网络内的防护措施也会干扰 goland 进行正常的远程调试连接过程。因此应当检查是否有任何阻止程序间通信的安全策略正在生效,并适当放宽权限以便允许 delve 正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值