使用 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```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,886评论 18 139
  • 程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原...
    Manfred_Zone阅读 16,572评论 0 26
  • [转]浅谈LLDB调试器文章来源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc阅读 2,572评论 2 6
  • 未成良人先妇人,君可悔意?愿良人不负。着红妆缨八台阁,并未妄度空合璧 一把丹心变伤心,杯酒能消?思一介书生。家困橱...
    Longczx阅读 156评论 0 2
  • 2017年11月5日,在深圳大剧院地铁站,有一对穿着光鲜,打扮还算亮丽的男女(女主站着装委屈,男则寻找像我...
    画鸣阅读 406评论 0 1