【Linux】调试工具gdb(2)

简介: 【Linux】调试工具gdb(2)

设置断点

break + 行号:在某一行设置断点,beak也可简写为b,例如b 18,在第18行打上断点,随后报出相应信息。

break + 函数名:在某个函数开头设置断点。

如果有多个文件的话,可以指定文件名 + 冒号 + 函数名

查看断点

intfo break:查看断点信息,Num为断点编号,Type为类型,What表示断点设置在哪个位置。

⚠️注意:断点的编号是在一个调试会话中逐渐递增的,如果删除某一个断点,创建下一个断点后,那么这个断点的编号为上一个删除断点的后一个数字,删除断点不代表创建断点编号也会刷新,而是一直处于递增的状态。如果退出gdb调试,那么所有断点都会被清除!

删除断点

delete breakpoints:删除所有断点。

delete n:删除编号为n的断点,delete也可用d表示。

禁用断点

disable n:禁用编号为n的断点。表示断点只是暂时禁用,但还是存在的。

禁用编号为1的断点之后,Enb的值由y变成了n

将编号为2的断点禁用之后,我们使用r命令,此时程序直接就跑出来了,因为断点都被禁用了。

启用断点

enable n:启用编号为n的断点。

将编号为1的断点启用之后,我们使用r命令,此时程序就在编号为1的断点位置停下来了。

逐过程

nnext:单条执行,相当于vs中的「F10」键,表示逐过程。

(gdb) b 18
Breakpoint 1 at 0x40055a: file mycode.c, line 18.
(gdb) r
Starting program: /home/Asi/study/day02/mybin 
Breakpoint 1, main () at mycode.c:18
18    int result = 0;
(gdb) n
20    result = AddToTop(top);

以上代码,通过在第18行打上断点之后,输入r开始调试,再输入n,程序跳到了第20行,为什么不在第19行停下,因为19行为空格,停下没有意义。

逐语句

sstep:进入函数调用,相当于vs中的「F11」键,表示逐语句。

我们在上一步骤的基础上,输入s,此时程序就进入了AddToTop()函数里面。

查看变量的值

p + 变量:打印变量值。注:只能再当前行显示,输入下一次命令时,就不会显示相关信息了。

如果想要像vs中监视窗口一样,一直可以观察到变量的变化状态,使用如下命令

display + 变量:跟踪查看一个变量,每次停下来都显示它的值。

undisplay + 条目编号:取消对先前设置的那些变量的跟踪。

info locals:查看当前栈帧局部变量的值。

修改变量的值

set var :修改变量的值

跳转

until + 行号:用于使程序执行到指定行号的位置。

finish:命令用于一直执行程序直到当前函数返回为止,然后在返回后停止执行。

使用 finish 命令可以跳过当前函数的剩余部分,直接返回到调用该函数的地方。

continue(或c):从一个断点直接运行到下一个断点处。

显示调用堆栈

breaktrace(或bt):显示调用堆栈。调用堆栈是程序执行期间函数调用的历史记录,它显示了函数调用的顺序以及每个函数在调用栈中的位置。

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