进入调试
使用前,请先确保机器上已经安装 GDB
[root@localhost code]# which gdb /usr/bin/gdb
准备就绪后,以下列测试程序为例
package main
import "fmt"
func main(){
msg := "hello, world"
fmt.Println(msg)
}
然后执行 如下命令进行编译,里面有好多个参数,有疑问的可以自行搜索引擎
# 关闭内联优化,方便调试
$ go build -gcflags "-N -l" demo.go
# 发布版本删除调试符号
go build -ldflags “-s -w”
最后使用 GDB 命令进入调试界面
# tui 界面
$ gdb -tui demo
# 纯终端界面
$ gdb demo
进入 后就可以打断点调试了
(gdb) b main.main # 在 main 包里的 main 函数 加断点
Breakpoint 1 at 0x4915c0: file /home/wangbm/code/demo.go, line 5.
(gdb) run # 执行进程
Starting program: /home/wangbm/code/demo
Breakpoint 1, main.main () at /home/wangbm/code/demo.go:5
(gdb)
# 注,如果需要带参数运行,比如正常这样运行:
./app -a 1 --debug
# 在 gdb 中就这样运行
gdb app
(gdb) run -a 1 --debug
调试指令
要熟练使用 GDB ,得熟悉的掌握它的指令,这里列举一下
r:run,执行程序n:next,下一步,不进入函数s:step,下一步,会进入函数b:breakponit,设置断点l:list,查看源码c:continue,继续执行到下一断点bt:backtrace,查看当前调用栈p:print,打印查看变量q:quit,退出 GDBwhatis:查看对象类型info breakpoints:查看所有的断点info locals:查看局部变量info args:查看函数的参数值及要返回的变量值info frame:堆栈帧信息info goroutines:查看 goroutines 信息。在使用前 ,需要注意先执行source /usr/local/go/src/runtime/runtime-gdb.pygoroutine 1 bt:查看指定序号的 goroutine 调用堆栈- 回车:重复执行上一次操作
其中有几个指令的使用比较灵活
CodeBlock Loading...
把上面的 l 换成 b ,大多数也同样适用
CodeBlock Loading...
还有 p - print,打印变量
CodeBlock Loading...
以上就是关于 GDB 的使用方法,非常简单,可以自己手动敲下体验一下。