手把手教你goland远程调试

本文详细介绍了如何在CentOS服务器上使用golang的DLV工具进行远程调试,包括环境安装、goland配置以及开发部署示例,重点展示了如何通过goland连接并调试服务器上的代码.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

实际工作中难免遇到需要调试服务器上代码的情况,最近项目就遇到了代码在服务上报出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调试代码
打好断点,然后debug 新建的 mytestRemote,即可进行调试如下
在这里插入图片描述
同时可以看到,只有调试才会有日志输出

在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

catch that elf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值