gdb调试golang

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

     经过下面的讲解你能够一步一步的看到golang代码是如何执行的,变量如何赋值的,内存是何时分配的等等一系列底层原理。bash

准备环境:
       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可执行文件。ui

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

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

   >>run           //运行进程unix

  >>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.csdn.net/liigo/article/details/582231?utm_source=copy 这篇文章能够好

相关文章
相关标签/搜索