安装dlv
执行go install 安装dlv
go install github.com/go-delve/delve/cmd/dlv@latest
执行 dlv version 查看是否安装成功
$ dlv version
Delve Debugger
Version: 1.22.0
Build: $Id: 61ecdbbe1b574f0dd7d7bad8b6a5d564cce981e9 $
断点调试
dlv有以下三种方式进行断点调试:
- dlv attach pid:对正在运行的进程直接进行调试(pid 为进程id);
- dlv debug:编译源文件并开始调试,这里应和 main 函数位于同一目录,或者指定完整的 main 函数路径
- dlv exec filename:从二进制文件启动调试
dlv常用调试命令:
命令 | 含义 |
---|---|
b | 设置断点 |
bp | 打印正活动的断点信息 |
clear | 删除断点 |
clearall | 删除所有断点 |
c | 运行直到断点处或程序终止 |
n | 下一步,不会进入函数 |
s | 下一步,会进入函数 |
so | 跳出当前函数 |
args | 查看函数参数 |
locals | 查看所有局部变量 |
list | 打印当前源代码 |
on | 运行到某断点然后执行相应的命令,比如 on 2 list |
bt | 打印当前调用栈 |
exit | 退出 |
goroutines (grs) | 列出所有的 goroutines |
goroutine (gr) | 查看当前的 goroutine |
goland 使用 dlv 进行断点调试
点击debug按钮进入调试
添加断点
注:有的goland编译器不能执行debug如下图,是因为goland自带的dlv版本过低,升级dlv的版本即可
或者去修改dlv的默认路径:
dlv + goland 实现远程调试
- 在目标服务器安装dlv
- 将本地项目打包成二进制文件并推送到目标服务器
go build -gcflags "all=-N -l" 关闭内联优化,编译生成调试符号
- 在目标服务器执行dlv命令
dlv --listen=127.0.0.1:1234 --headless=true --api-version=2 --check-go-version=false --only-same-user=false exec main
--listen 监听端口
--headless 无头模块,接受客户端连接
--api-version 无头模式设置为2
--only-same-user 是否多用户连接
- 在goland上设置远程debug