对于golang这类静态型语言调试工具是必不可少的,不管是在平时的开发还是对语言底层原理的熟悉上面都是很重要的工具。gdb作为unix及unix-like系统上面强大的调试工具同样可以调试golang应用。
通过下面的讲解你可以一步一步的看到golang代码是如何执行的,变量如何赋值的,内存是什么时候分配的等等一系列底层原理。
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 相当于其它调试器中的“Step Over (单步跟踪)”。
通过上面的可以清晰的看出来,随着输入s可以看出代码详细的执行过程,比如map的执行过程,内存分配过程等等,如果只是想看写的代码一行一行的执行结果可以输入n。
通过上面的命令已经可以很好的查看golang代码运行过程,下面是一些具体的变量信息,方便更加具体了解值。
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 这篇文章可以好