手把手教你goland远程调试

手把手教你goland远程调试,第1张

文章目录 简介go环境安装dvl 工具安装开发部署示例程序进行调试验证

简介

实际工作中难免遇到需要调试服务器上代码的情况,最近项目就遇到了代码在服务上报出tcp握手失败的异常,而本地却正常的情况,日志不好加,这里研究了一下golang远程调试方法,并做记录。
测试基于goland和dlv实现go代码的远程调试。远程服务器采用centos7.9

go环境安装

安装配置
下载golang linux安装包,并解压到/root/apps/go 目录,配置环境变量

vi /etc/profile
export GOROOT=/root/apps/go
export GOPATH=/root/apps/go/gopath
export PATH=$PATH:/$GOROOT/bin:$GOPATH/bin

验证
执行 如下命令查看go的版本,能看到证明安装成功

[root@localhost go]# go version
go version go1.17.5 linux/amd64
dvl 工具安装

下载工具dlv

[root@localhost gopath]# go env -w GOPROXY=https://goproxy.cn  --配置golang代理
[root@localhost gopath]# cd $GOPATH -- 到 gopath目录下
[root@localhost gopath]# go install github.com/go-delve/delve/cmd/dlv@latest  --安装dlv
[root@localhost gopath]# ln -s $GOPATH/bin/dlv /usr/local/bin/dlv  --配置软连接
[root@localhost gopath]# dlv version
Delve Debugger
Version: 1.8.0
Build: $Id: 6a6c9c332d5354ddf1f8a2da3cc477bd18d2be53 $

也可以直接下载我编译好的,放到服务器上并赋予执行权限即可。点击下载

开发部署示例程序

代码
采用goland 开发示例程序如下,我们这里循环打印当前时间10000次以观察调试效果,myTest.go代码如下

package main

import (
	"fmt"
	"time"
)
var (
	age int
	name string
)
func main(){
	age = 18
	name = "surpass"
	fmt.Println("name is %s, age is %d",name,age)
	for i := 0; i < 10000; i++ {
		time.Sleep(1*time.Second)
		fmt.Println("time======",time.Now())
	}

}

编译及部署
将代码编译并部署到 上述centos 服务器上,如下 gotest,为gotest增加执行权限
采用如下命令运行程序可以看到进程id,具体如下

[root@localhost gopath]# ll
总用量 2124
drwxr-xr-x. 2 root root      17 12月 26 12:03 bin
-rwx------. 1 root root 2040565 12月 26 12:21 gotest
-rw-------. 1 root root   86568 12月 26 12:59 nohup.out
drwxr-xr-x. 4 root root      30 12月 26 12:03 pkg
drwxr-xr-x. 3 root root      24 12月 26 00:32 src

[root@localhost gopath]# nohup ./gotest  &
[2] 335
[root@localhost gopath]# nohup: 忽略输入并把输出追加到"nohup.out"
进行调试验证

启动dlv
centos 服务器上启动gotest程序后,需要通过如下命令启用dlv工具,可以看大启动后 dlv在等待客户端连接

[root@localhost gopath]# dlv attach 335 --headless --listen=:2345 --api-version=2 --accept-multiclient
API server listening at: [::]:2345
2021-12-26T13:06:55+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)

goland配置
goland中增加一个go remote 配置如下

goland调试代码
打好断点,然后debug 新建的 mytestRemote,即可进行调试如下

同时可以看到,只有调试才会有日志输出

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/989605.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存