本篇文章写于2022年02月20日,从公众号|掘金|CSDN手工同步过来(博客搬家),本篇为原创文章。
远程debug也是排查线上故障的有效手段。
容器下受权限限制,需要以root启动进程,并且获得特权模式才可使用。
前提条件
在编译go项目时,使用go build -gcflags "all=-N -l"
,关闭内联优化,以支持debug。
关于-gcflags "-N -l"
参数的解释:
> 编译时,如果编译的结果需要gdb调试则使用参数-gcflags "-N -l"
,这样可以忽略Go内部做的一些优化,聚合变量和函数等优化。
服务器环境准备
1、go安装
wget https://go.dev/dl/go1.17.6.linux-amd64.tar.gz (选择版本下载)
tar -zxvf go1.17.6.linux-amd64.tar.gz
2、生成临时环境变量
export GOPATH=/tmp/goprojects
export GOROOT=~/go
export PATH="$PATH:$GOROOT/bin"
3、下载安装git
root权限下可yum install git
安装成功后再切换登录用户.
4、安装delve工具
git clone https://github.com/derekparker/delve.git
cd delve/cmd/dlv/
go build
go install
可执行文件在$GOPATH/bin路径下,如/tmp/goprojects/bin
5、服务端启动监听服务
$GOPATH/bin/dlv attach 进程id --headless --api-version=2 --log --listen=:2345
,如:
./bin/dlv attach 4056 --headless --api-version=2 --log --listen=:2345
如果提示没有权限,切换到root用户执行。
GoLand配置
不需要配置什么FSTP,上传代码,仅需要按下图配置一个Go Remote
即可。