前言
在开发/排查过程中, 偶尔会遇到一些仅在正式环境才能复现的BUG, 但由于本地不能访问正式环境, 只能用有限的方式对问题进行 Debug, 例如添加日志等原始方法, 效率过低. 因此推荐放弃这种方式, 借助IDE和Delve进行远程调试, 完成对BUG的快速排查与修复.
准备
-
一台可以访问正式环境的服务器.
-
IDE, 这里推荐使用
Jetbrains
家的IDE, 以下用GoLand
为例.
步骤
1. 安装Delve
在服务器上安装Delve.
官网: https://github.com/derekparker/delve, 安装方法请参照官方wiki.
2. 查看IDE说明
程序的编译和启动尽量按照IDE的提示说明进行. 在 GoLand
中点击菜单栏 Run
-> EditConfigurations
-> +
-> GoRemote
. 我们将看到如下界面. 中间为编译及启动说明.
3. 编译你的程序
根据IDE说明, 在服务器上编译你的程序, 必须添加 -gcflags
参数, 其他随意.
-
Go 1.10 及以上
go build -gcflags "all=-N -l" github.com/app/demo
-
Go 1.9 及以下
go build -gcflags "-N -l" github.com/app/demo
4. 使用dlv启动你的程序
根据IDE说明, 在服务器上使用dlv启动编译好的程序.
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./demo
如果程序需要启动参数, 则在后面添加 --
.
dlv
--listen=:
2345 --
headless=true
--api
-version=
2 --
accept-multiclient
exec ./
demo -- -
c=/config
# 等同于
./
demo -c
=/config
5. 本地配置Debug
在刚刚的 EditConfigurations
中添加 GoRemote
并在Host和Port中配置服务器IP地址和端口号.
完成配置后, 我们就可以同本地 Debug 一样, 享受远程 Debug 了.
参考资料:Go语言远程调试方法 [ https://linkscue.com/2018/09/07/2018-08-29-golang-remote-debug/ ]