gdb调试golang

       对于golang这类静态型语言调试工具是必不可少的,不管是在平时的开发还是对语言底层原理的熟悉上面都是很重要的工具。gdb作为unix及unix-like系统上面强大的调试工具同样可以调试golang应用。

     通过下面的讲解你可以一步一步的看到golang代码是如何执行的,变量如何赋值的,内存是什么时候分配的等等一系列底层原理。

准备环境:
       gdb 7.1和以上

       go开发环境

一段简短的golang代码

package main
import "fmt"
func main(){
  c:=make(map[string]interface{})
  fmt.Println(c)
}复制代码

go build -gcflags "-N -l" test.go //生成可执行代码,编译,关闭内联优化

好了,至此准备工作已经ok,环境,工具,运行程序都有了,下面开始利用gdb调试go可执行文件。

gdb -tui test   #在运行时同时显示代码 特别方便

  >> b main.main //在main函数加断点

   >>run           //运行进程

  >>s             //s是step的缩写,s和n的区别 看下面

、、、、、、、、、、

s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;

n: 执行一行源程序代码,此行代码中的函数调用也一并执行。

s 相当于其它调试器中的“Step Into (单步跟踪进入)”;
n 相当于其它调试器中的“Step Over (单步跟踪)”。

、、、、、、、、、、、


继续输入s


通过上面的可以清晰的看出来,随着输入s可以看出代码详细的执行过程,比如map的执行过程,内存分配过程等等,如果只是想看写的代码一行一行的执行结果可以输入n。

      通过上面的命令已经可以很好的查看golang代码运行过程,下面是一些具体的变量信息,方便更加具体了解值。

下面是一些常用的命令,可以看看,
l main.go:8 // 以 :方式查看源码。
b main.main // 以 .方式设置断点。
b main.go:17 // 以 :方式设置断点。


info breakpoints // 查看所有断点。
info goroutines // 查看 goroutines 信息。

goroutine 1 bt // 查看指定序号的 goroutine 调用堆栈。
goroutine 2 bt // 这个 goroutine 貌似跟 GC 有关。
c 继续执行
n 执行下一个指令
info goroutines // 当前 goroutine 序号为 1。
goroutine 1 bt // 当前 goroutine 调用堆栈。
bt    // 查看当前调⽤堆栈,可以与当前 goroutine 调用堆栈对比。
info frame // 堆栈帧信息。
info locals // 查看局部变量
p s // 以 Pretty-Print 方式查看变量。

whatis i // 查看对象类型

c // 继续执行,触发 breakpoint() 断点。

info args // 从参数信息中,我们可以看到命名返回参数的值。

x/3xw &r // 查看 r 内存数据。(指针 8 + 长度 4)

q // 退出 GDB。


强烈推荐blog:

https://blog.youkuaiyun.com/liigo/article/details/582231?utm_source=copy 这篇文章可以好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值