一、背景
go 开发的程序需要编译成二进制放在环境上之后,通过 ./二进制文件名称 (linux服务器上的启动方式) 进行启动。 当程序允许过程中,如果发现有问题,此时希望能够 向Java 一样可以通过工具进行代码远程调试,这样可以更快发现问题。此时可以使用 dlv 工具。
二、安装
1、手动安装
当需要调试的服务器是离线的情况下,此时我们希望能够进行手动安装
1.1 下载源码 (Releases · go-delve/delve)
由于我的go版本使用的是 1.24.2, 所以这里也下载了 1.24.2 对应的源码
1.2 编译源码
- 将下载的 delve-1.24.2.tar.gz 上传到服务器上(本文章放在了 /opt/go/tool 下,go 安装在了 /opt/go/go 下)
- tar -zxvf delve-1.24.2.tar.gz
- cd delve-1.24.2
- go build github.com/go-delve/delve/cmd/dlv 在当前目录下生成了 dlv文件
1.3 安装
- 将 dlv 文件移动动 go path 目录下。 (\cp dlv /opt/go/go/bin)
- dlv version 查看版本
2、利用 go 环境进行安装
环境中已经安装上了go,且该环境可以连网络 或者 go env 中的代理可以连接上,此时可以利用go 直接安装 dlv
2.1
三、配置远程调试环境
1、在开发工具 Visual Studio Code 中配置 dlv
- 在开发工具中打开你的 go 工程
- 打开调试模式菜单下的配置 。。。 左侧点击“有爬虫的图标”,点击上侧的 的下拉图标,可以看到 一些菜单, 点击 “添加配置(xxxx)”,其中 xxxx 是你的go程序目录名称
- 右侧出现 launch.json文件
2、配置 launch.json
在文件中添加如下配置内容
- name:调试名称
- type :默认 go
- request:attach
- mode:remote
- remotePath:填写远程服务器上 go 二进制程序 源码所在路径
- port:远程服务器上开启的 dlv 调试端口
- host:远程服务器的IP
- trace:verbose
- showLog:true 是否打开日志
3、将go 二进制程序的源码放到 远程服务器上
四、启动远程调试
1、远程服务器 开启 dlv 调试进程
- 远程到服务器 go 二进制源码所在目录下
- dlv debug --headless --listen=:2366 --api-version=2 --log
可以看到 启动在 2366端口上,且go二进制程序已经运行
2、启动 Visual Studio 上的 远程调试
五、用法深入研究
六、常见问题
1、启动go文件不存在于程序源码根路径下且程序依赖C++库。
1.1 具体场景描述
main.go文件不存在,程序入口go文件不在源代码根目录下,而是在其它子目录下;代码中存在加载C++库文件的逻辑。目录结构如下:
1.2 问题
此情况下,通过dlv调式(在源码根路径下 -- go.mod 所在目录, 执行dlv 命令: dlv debug --listen=:2366 --headless=true --api-version=2 --log ./core/start/start.go),遇到如下问题:
1)
1.3 解决方案