Go 远程调试

写在前面

开发环境是 Windows + GoLand,断断续续整理的,前面的图都没记录,建议直接跳到 Plan C。

Plan A:使用 go remote debug 远程机器的 go 程序

安装 go 环境

1
go version go1.21.2 linux/amd64

切换代理

1
$ go env -w GOPROXY=https://goproxy.cn,direct

安装 dlv

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

迁移 dlv 命令到 /usr/bin

1
$ cp $GOPATH/bin/dlv /usr/bin

使用 dlv 运行 go 程序

1
nohup sudo dlv --listen=:2345 --headless=true --api-version=2 exec ./ogcli server &

使用 goland go remote 绑定端口 debug

优点

  • 本地环境解耦

缺点

  • 启动麻烦

Plan B:使用 go build ssh 部署到远程机器

go build 选择 ssh 并配置节点信息

更新:经测试 GoLand 24.1.4 不需要额外配置和切换 dlv 即可 debug(下述操作可无视)

修改 idea.properties (需要重启 goland)

1
2
#dlv.path=C:\\Users\\Rosin\\go\\bin\\dlv.exe  
dlv.path=C:\\Users\\Rosin\\go\\bin\\linux_amd64\\dlv

修改启动报错
原因:goland 远程部署 debug 时是用的本地 dlv 环境
https://youtrack.jetbrains.com/issue/GO-10971/Remote-debugging-dlv-syntax-error#focus=Comments-27-4852093.0-0

优点

  • 配置相对简单

缺点

  • 每次修改调试后部署时间长
  • 需要修改 dlv 路径,影响本地部署测试

Plan C:使用 sftp + rsync 同步开发(目前使用)

https://www.jetbrains.com/help/go/2024.1/settings-tools-rsync.html?reference.settings.tools.rsync&utm_source=product&utm_medium=link&utm_campaign=GO&utm_content=2024.1

1. 安装 Cygwin + rsync + openssh

Cygwin 在 Windows 上提供大量 GNU 和开源工具实现与 Linux 发行版类似的功能。

安装过程中搜索并挑选两个喜欢的 rsync 和 openssh 版本号

2. 配置 rsync 执行路径

在 Goland 中配置刚刚下载的 rsync 执行路径

3. 配置 sftp

选择之前配置的 SSH,并挑一个根目录作为开发目录

4. 修改运行配置

在运行配置中选择之前配置的 ssh

勾上 Use rsync

最后留意下运行环境配置,确认后可以跑下看看

优点

  • 开发调试方便快捷

缺点

  • 初次配置麻烦