有时候本地环境很难实现“完整的线上环境”的现场,怎么使用goland这个“go语言最强IDE”进行远程线上进行Debug呢?这里将给你答案。
1. 将你编译好的go语言二进制文件上传到远程机
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build cmd/myproject.go
将项目编译出linux的二进制文件: myproject
你可以通过scp将你的文件上传到远程机
scp -i <二进制文件> <远程机hostname>@<远程机ip>:<远程机存放二进制文件的路径>
比如:
scp -i ~/work/share/sshkey/mykey.sshkey ./myproject centos@my-node:/home/myfold/myproject
远程机要能够运行go语言项目,需要安装go编译器,如何在linux安装go 编译器,如果是ubuntu系统可以参考:
How to install Go [golang] on Ubuntu Linux
2. 在远程机器上本地安装dlv 工具
dlv的官方地址可以参考:全球最大同性交友网站的github
具体过程为:
- $ git clone https://github.com/go-delve/delve
- $ cd delve
- $ go install github.com/go-delve/delve/cmd/dlv
golang 1.16或者后面版本可以参考:
- # Install the latest release:
- $ go install github.com/go-delve/delve/cmd/dlv@latest
-
- # Install at tree head:
- $ go install github.com/go-delve/delve/cmd/dlv@master
-
- # Install at a specific version or pseudo-version:
- $ go install github.com/go-delve/delve/cmd/dlv@v1.7.3
- $ go install github.com/go-delve/delve/cmd/dlv@v1.7.4-0.20211208103735-2f13672765fe
3. 在远程机上运行golang项目
- 将golang二进制在远程机上运行。
~/go/bin/dlv --listen=:2345 --headless=true --api-version=2 exec ./myproject
我们可以发现,远程机的dlv工具(服务端)使用2345 端口为提供一个用于远程myproject 的服务,用于本地dlv(客户端)的连接。
4. 本地使用tunnel 代理连接远程机器连接 (如果不需要代理,可以忽略这一步)
本地的tunnel可以使用ssh 来完成:
ssh -L 2345:<远程代理的机器>:2345 -N -i ~/.ssh/sshkey <远程机hostname>@<远程机ip>
这样一来,本地就可以用2345端口连接跟远程机器的23452345端口联通。
5. 本地配置goland 实现远程线上debug
打开goland (mac 版本):
goland- > Run -> edit Configurations... -> 新增一个run 配置 ;
然后使用本地的2345 端口来进行debug。(由于你使用代理或者直接连接2345来连接远程机的2345端口,所以你要配置这个端口来进行)
然后就可以在本地goland 设置断点,然后点击debug进行在线debug了。
注意:
本地的代码必须和远程机上的go程序二进制完全相同。如果本地代码变动了,必须再重新编译一个新的二进制代码到远程机上,二者必须实时相同。