delve是golang推荐的调试工具,大名鼎鼎的GoLand, 使用的也是delve。使用gdb也可以调试delve,不过据我所知,对golang而言,gdb还是有些bug存在,优先推荐使用delve
环境准备
需要在对应机器上安装dlv和golang环境
go install github.com/go-delve/delve/cmd/dlv@latest
查看版本
dlv version
帮助文档
- https://github.com/go-delve/delve/tree/master/Documentation/cli
- https://github.com/go-delve/delve/blob/master/Documentation/cli/getting_started.md
调试代码
- 启动调试
方式一,先进入main函数所在目录,直接执行dlv debug
cd xxx/cmd/ dlv debug --arg1 value --arg2 value #其中用--来传递参数
方式二,在任意目录下,执行dlv debug pakcage
dlv debug github.com/me/foo/cmd/foo
- 帮助命令
help
- 设置断点
设置断点的方式:
设置到指定函数 b main.main 设置到指定代码行数(可设置到引用库中) b /fullpathtofile/xxx@v0.31.0-dev0-fix0/xxx.go:457
- 运行程序:
c
调试测试用例
假设测试用例代码结构如下:
├── pkg │ └── baz │ ├── bar.go │ └── bar_test.go
调试流程:
$ dlv test github.com/me/foo/pkg/baz Type 'help' for list of commands. (dlv) funcs test.Test* /home/me/go/src/github.com/me/foo/pkg/baz/test.TestHi (dlv) break TestHi Breakpoint 1 set at 0x536513 for /home/me/go/src/github.com/me/foo/pkg/baz/test.TestHi() ./test_test.go:5 (dlv) continue > /home/me/go/src/github.com/me/foo/pkg/baz/test.TestHi() ./bar_test.go:5 (hits goroutine(5):1 total:1) (PC: 0x536513) 1: package baz 2: 3: import "testing" 4: => 5: func TestHi(t *testing.T) { 6: t.Fatal("implement me!") 7: } (dlv)
- dlv test开始测试用例调试
- funcs用正则表达式查找函数
- break设置断点
- countinue开始调试
常用指令
代码相关:
l 显示代码 l 70 显示第70行代码
断点相关:
n 下一行 s step into so step out c continue bp 打印所有断点 clear 3 删除id为3的断点 clearall 删除所有断点
查询查看
p xxx 查看变量xxx的值 bt 查看调用栈 args 查看函数变量 locals 查看所有临时变量 help 查看帮助
goroutine
gr 查看当前goroutine gr 3 切换到id为3的goroutine grs 查看所有的goroutines
发表回复