使用 dlv + GoLand 远程调试Go程序

10,324 阅读1分钟
原文链接: mp.weixin.qq.com

前言


在开发/排查过程中, 偶尔会遇到一些仅在正式环境才能复现的BUG, 但由于本地不能访问正式环境, 只能用有限的方式对问题进行 Debug, 例如添加日志等原始方法, 效率过低. 因此推荐放弃这种方式, 借助IDE和Delve进行远程调试, 完成对BUG的快速排查与修复.

准备


  1. 一台可以访问正式环境的服务器.

  2. 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/ ]