200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 手把手教你goland远程调试

手把手教你goland远程调试

时间:2024-02-02 20:55:53

相关推荐

手把手教你goland远程调试

文章目录

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

简介

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

测试基于goland和dlv实现go代码的远程调试。远程服务器采用centos7.9

go环境安装

安装配置

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

vi /etc/profileexport GOROOT=/root/apps/goexport GOPATH=/root/apps/go/gopathexport PATH=$PATH:/$GOROOT/bin:$GOPATH/bin

验证

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

[root@localhost go]# go versiongo version go1.17.5 linux/amd64

dvl 工具安装

下载工具dlv

[root@localhost gopath]# go env -w GOPROXY= --配置golang代理[root@localhost gopath]# cd $GOPATH -- 到 gopath目录下[root@localhost gopath]# go install /go-delve/delve/cmd/dlv@latest --安装dlv[root@localhost gopath]# ln -s $GOPATH/bin/dlv /usr/local/bin/dlv --配置软连接[root@localhost gopath]# dlv versionDelve DebuggerVersion: 1.8.0Build: $Id: 6a6c9c332d5354ddf1f8a2da3cc477bd18d2be53 $

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

开发部署示例程序

代码

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

package mainimport ("fmt""time")var (age intname string)func main(){age = 18name = "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总用量 2124drwxr-xr-x. 2 root root17 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.outdrwxr-xr-x. 4 root root30 12月 26 12:03 pkgdrwxr-xr-x. 3 root root24 12月 26 00:32 src[root@localhost gopath]# nohup ./gotest &[2] 335[root@localhost gopath]# nohup: 忽略输入并把输出追加到"nohup.out"

进行调试验证

启动dlv

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

--注意 335 是 上述启动 go进程的id 2345 是服务监听的端口 这里写哪个端口 goland中就要配置哪个端口,其他参数可以通过 执行 dlv 查看帮助信息[root@localhost gopath]# dlv attach 335 --headless --listen=:2345 --api-version=2 --accept-multiclientAPI server listening at: [::]:2345-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,即可进行调试如下

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。