打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Go 语言系列36:使用 GDB 调试

对于 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.

👇周一至周五更新,期待你的关注👇

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何调试多线程程序
使用 GDB 调试 Linux 软件
Linux下的C编程实战之开发平台搭建 - 天极网
GDB调试多线程
linux下的c/c++调试器gdb
Linux 使用gcore、gdb、pstack、strace命令查死锁问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服