使用 delve 调试 golang 程序

安装 delve

官方的文档已经很全了,参考这里(github)安装。Mac OSX 比较麻烦,需要搞定证书。

断点和变量打印

delve 装好之后就可以直接在命令行使用 dlv 命令了。
查看可用的命令
dlv -h

看帮助信息可知:支持用 dlv attach 的方式调试正在运行的进程,支持 dlv connect 链接到网络端口调试。这里先用最简单的 dlv debug 调试。
dlv debug main.go

然后会进入调试模式,此时 help 可以看到支持的命令。
(dlv) b main.go:16 #在 main.go 的第 16 行设置断点。
(dlv) bp #查看当前所有断点(dlv) c #运行到下一个断点或者程序结尾
(dlv) p a #打印变量 a 的值(dlv) n #单步执行代码(dlv) set a=1 #设置变量a 的值

你也可以在函数上设置断点:
(dlv) b main.main

同时你也可以输出一个表达式:

true ```

我们使用 continue 到我们设置断点的地方,然后 next
```(dlv) next ```

清除所有断点:
```(dlv) clearall```

###进阶调试
其实很多时候,我们调试的代码可能是 daemon
 程序或者需要实现编译好在不同机器运行的程序。这就需要我们 attach
 到一个已经在运行中的程序上,下面我们就使用上面的代码来演示一下如何 attach
 到一个程序上进行调试。首先将刚才的程序运行起来,我这里直接使用了
```go build test-debug.go./test-debug```

然后使用ps查看正在运行的程序pid
```501 40994 549 0 12:08AM ttys003 0:00.00 ./test-debug```

然后我们 attach上去
```(dlv) attach 40994```

可以看到,熟悉的 debug seesion又回来了。下面我们可以继续使用上面的命令去设置断点了
```(dlv) break dostuff```
    原文作者:穿越的辣椒
    原文地址: https://www.jianshu.com/p/a513410b8c6a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞