原文链接:gdb调试golang程序
发布时间:2018-12-09 11:26:28
文章目录
gdb是linux系统自带的调试器,功能十分强大,对于C/C++程序员不会陌生,那么使用gdb如何调试golang程序呢?
1、配置gdb
golang这门语言是2009年才出来,gdb并没有原生支持调试golang,这里需要配置gdb,使它支持golang,关于这里面的原理,我还不是很清楚,应该是gdb本身支持扩展,可以以提供插件的形式扩展支持其他语言,具体怎么样,我也不是很清楚,待后续研究。
言归正传,这样配置:
1、打开gdb初始化配置文件
1 | vim /home/KentZhang/.gdbinit ## 注意,KentZhang是我的家目录,你需要改成你的家目录 |
2、增加如下的一行
1 | add-auto-load-safe-path /usr/local/go/src/runtime/runtime-gdb.py ## 注意, /usr/local/go是我的golang安装目录 |
3、然后重启gdb
使用gdb启动一个go程序:
1 | [KentZhang@LOCAL-192-168-97-2 bak]$ gdb demo.exe |
Loading Go Runtime support 出现这句话,就表示gdb可以支持golang。
2、编译golang
虽然gdb也支持golang了,但是在编译golang仍然需要加一些特殊的参数,否则出现如下的错误:
1 | No symbol in current context |
就是程序内的变量,你都无法打印,gdb说找不到。所以编译时,需要加下列的参数:
1 | go build -gcflags=all="-N -l" ## 必须这样编译,才能用gdb打印出变量,第二个是小写的L,不是大写的i |
3、打断点
关于打断点,必须使用特定的方式,由于golang是以包为单位管理代码,所有打断点时,要注意包名。
1、包名+函数名
1 | (gdb) b main.main ## main包的main函数 |
2、文件名+行号
1 | (gdb) b main.go:17 |
4、总结
基本上经过三个步骤,就可以像调试C/C++一样调试golang了。
由于gdb不支持协程的调试,所以gdb调试golang有时候显得捉襟见肘。