对于 C 语言学习者来说,使用 GDB 调试应该是很熟悉的事情。这一期我们就来简单讲一讲在 Go 语言中如何使用 GDB 在 Linux 上进行调试。
在 Linux 上安装 Go
首先还是来到 Go 语言官网,找到下载地址并复制:
https://go.dev/dl/go1.17.5.linux-amd64.tar.gz
在 Linux 命令行下使用 wget
下载:
$ wget https://go.dev/dl/go1.17.5.linux-amd64.tar.gz
下载完成后,使用 tar
命令把包解压到 /usr/local
目录下:
$ tar -C /usr/local -xzf go1.17.5.linux-amd64.tar.gz
解压后再设置环境变量:
$ export PATH=$PATH:/usr/local/go/bin
再使用 which
命令检查 go 环境配置。
$ which go
/usr/local/go/bin/go
接着使用下面命令检查 go 是否安装成功:
$ go version
go version go1.17.5 linux/amd64
开始调试
首先要在 Linux 上安装 GDB
,我用的是 Ubuntu
,使用的命令如下:
$ apt-get update
$ apt-get install gdb
安装完成后,我们检查是否安装成功:
$ which gdb
/usr/bin/gdb
一切准备就绪,先创建一个目录,在该目录下写一个 main.go
测试文件:
package main
import "fmt"
func main(){
message := "Let's go"
fmt.Println(message)
}
首先,我们编译刚刚的测试文件:
$ go build -gcflags "-N -l" main.go
编译完成后使用下面的命令调试 main 程序:
$ gdb main
接下来我们设置断点,这里设置为 main
包的 main
函数:
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
...
(gdb) b main.main
Breakpoint 1 at 0x47e2e0: file /home/caizi/go-36/main.go, line 5.
然后执行 run
命令执行程序:
(gdb) run
Starting program: /home/caizi/go-36/main
[New LWP 2814]
[New LWP 2815]
[New LWP 2816]
Thread 1 "main" hit Breakpoint 1, main.main () at /home/caizi/go-36/main.go:5
5 func main(){
然后使用 c
命令继续执行到下一个断点,因为我们没有设置其他断点,所以运行完整个程序后退出:
(gdb) c
Continuing.
Let's go
[LWP 2815 exited]
[LWP 2814 exited]
[LWP 2810 exited]
[Inferior 1 (process 2810) exited normally]
使用 q
命令退出 gdb :
(gdb) q
$
当然,你也可以使用下面的命令以 TUI
模式调试程序:
$ gdb -tui main
运行此命令你会看到一个可视化调试界面:
同样,我们设置断点后执行程序,这次我们使用 n
命令执行下一步:
GDB 调试指令
下面简单的列出了 GDB 常用的指令,要想熟练掌握 GDB 调试,看这一篇文章肯定是不够的,以后有机会再详细讲一讲 GDB 调试。
命令 | 含义 |
---|---|
r | (run)执行程序 |
n | (next)下一步(不进入函数) |
s | (step)下一步(会进入函数) |
b | (breakponit)设置断点 |
l | (list)查看指定源码指定行数范围/查看函数 |
c | (continue)继续执行到下一断点 |
bt | (backtrace)查看当前调用栈 |
p | (print)打印查看变量 |
q | (quit)退出GDB |
whatis | 查看对象类型 |
info breakpoints | 查看所有的断点 |
info locals | 查看局部变量 |
info args | 查看函数的参数值及要返回的变量值 |
info frame | 堆栈帧信息 |
回车 | 重复执行上一次操作 |
参考文献:
[1] Alan A. A. Donovan; Brian W. Kernighan, Go 程序设计语言, Translated by 李道兵, 高博, 庞向才, 金鑫鑫 and 林齐斌, 机械工业出版社, 2017.
👇周一至周五更新,期待你的关注👇
联系客服