【Linux】gdb 的使用

简介: 【Linux】gdb 的使用

1. 使用 gdb 的前置工作

我们先简单写一些程序:

就是一个普通的打印程序,然后,

使用 Makefile 来自动化构建我们的项目:

这样直接 make 编译之后:

我们输入 gdb test 就能进行调试了:

但是他这里提示我们,这个可执行程序没有调试信息,

输入 quit 退出 gdb 调试。为什么会没有调试信息呢?

因为 Linux 环境下默认发行的是 release 版本。

我们需要在编译的时候添加上 -g 选项来增加调试信息到可执行程序里面:

现在完成了,我们再次使用 gdb test 进入调试状态:

发现了没,我们成功了,现在就可以开始调试了。

2. 如何使用 gdb 进行调试

我们先写一份简单的代码,就是用于测试调试的,根据自己喜好写就行了:

我们加入调试信息运行之后,使用 gdb。

1、如何看到我的代码

输入 l + 数字,就是从第几行开始看,不过一般不会全部显示出来:

(l + 源文件名字可以指定该文件)

只要我们再输入回车,他就会继续给我们输出:

2、如何打断点

我们可以使用 b + 行号来进行打断点:

(也可以 b + 函数名,b + mycode.c:10 指定文件行号)

那我们怎么查看断点有没有真的打上去了呢?

可以输入 info b 来进行查看:

这样就看到了,Num 表示的是断点的编号。

那怎么删除断点呢?

输入 d + 断点编号就可以删除这个断点:

3、怎么运行程序

当你打好了断点,你得把程序运行起来才能调试,那怎么运行呢?

输入 r 即可:

现在到了我们的设置在 15 行的断点,

4、如何进行逐过程调试

输入 n 可以进行逐过程调试(不进入函数)

这里要注意,如果函数里面有断点,就算用逐语句,gdb 也会停在里面,

所以这里先把在函数里的断点删掉,然后在继续 n :

我们可以看到,遇到函数就直接当做一个语句来运行了。

5、如何进行逐语句调试

输入 s 就能进行注语句调试:

我们可以看到他进入了这个 add 函数里面。

6、如何监视变量值

使用 p + 变量名 即可:

但是这样就输入的时候才能看一眼,能一直显示出来吗?可以,

输入 display + 变量名 即可:

这样我们继续调试的时候他就能出现在旁边了,

再使用 undisplay 就能取消观察了。

7、如何跳到指定位置

这个时候我们陷入了这个循环中,怎么样才能跳出来呢?

输入 until + 行号 就能跳到指定的行:

可以看到我们跳出了循环,来到了第 9 行。

8、运行完一个函数

当我们不想再在这个函数里面的时候,

输入 finish 就能直接运行完当前在的函数:

他还很贴心的把返回值告诉了我们。

9、怎么跳到下一个断点

输入 c 即可:

我们就成功从 15 行到了我们 21 行的这个断点的地方

10、如何禁用/开启断点

使用 disable + 断点编号即可禁用断点:

使用 enable + 断点编号即可开启断点

3、小总结

这里我把我觉得常用的都总结到一起了,可以用来快速的复习:

l(列出代码)

r(运行代码)

c(继续运行)

finish(结束当前函数)

p + 变量(打印变量的值)

b + 行号(打断点)

info(查看断点)

d + 行号(删除断点)

disable/enable(禁用断点/启用断点)

display/undisplay(监视一个变量的值/取消)

until + 行号(走到该行)

n(逐过程执行)

s(逐语句执行)(会进函数)

bt(查看调用堆栈)

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
2月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
56 10
|
2月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
2月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
85 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
4月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
36 1
|
4月前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
52 0
|
4月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
27 0
|
4月前
|
NoSQL Linux C++
Linux C/C++ gdb调试正在运行的程序
Linux C/C++ gdb调试正在运行的程序
|
5月前
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
361 2
|
5月前
|
NoSQL Linux 开发工具
【深入解析git和gdb:版本控制与调试利器的终极指南】(下)
【深入解析git和gdb:版本控制与调试利器的终极指南】
|
2月前
|
NoSQL
技术分享:如何使用GDB调试不带调试信息的可执行程序
【8月更文挑战第27天】在软件开发和调试过程中,我们有时会遇到需要调试没有调试信息的可执行程序的情况。这可能是由于程序在编译时没有加入调试信息,或者调试信息被剥离了。然而,即使面对这样的挑战,GDB(GNU Debugger)仍然提供了一些方法和技术来帮助我们进行调试。以下将详细介绍如何使用GDB调试不带调试信息的可执行程序。
61 0