返回

手把手教你goland远程调试

发布时间:2022-11-20 11:51:28 987
# less# centos# 服务器# 信息# 工具

文章目录

  • ​​简介​​
  • ​​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在等待客户端连接

--注意 335 是 上述启动 go进程的id   2345 是服务监听的端口 这里写哪个端口 goland中就要配置哪个端口,其他参数可以通过 执行 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远程调试_服务器

goland调试代码

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

手把手教你goland远程调试_示例程序_02

 

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

手把手教你goland远程调试_golang_03

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线