Linux基础环境开发工具的使用(三):gdb调试器(上)

简介: Linux基础环境开发工具的使用(三):gdb调试器

在C语言的学习过程中,我们学习过VS这个集成开发环境下的调试功能

对于我们排查代码中的问题发挥了非常重要的作用

那么在Linux环境下有没有一种调试器能让我们去调试代码呢?

是有的,就是我们今天要介绍的gdb

一.调试命令的应用场景

1.为什么要介绍调试命令的应用场景呢?

2.调试命令的应用场景

1.找到问题

1.不借助调试

2.调试

2.解决问题

1.不借助调试

一部分人选择走读代码/看上下文的方式来发现该位置出现这个问题的原因

然后更有针对性地去解决这个问题

2.借助调试

二.调试命令

首先先给大家看一下gdb的调试命令:

下面会给大家一一介绍

但是现在首先要说明的是:

1.gdb使用的前置说明

1.安装gdb

sudo yum install -y gdb

gcc -o 想要生成的可执行程序 依赖的源文件 -g
或者:
gcc 依赖的源文件 -o 想要生成的可执行程序 -g

我们对待gdb的态度是:

gdb就是一个调试工具,跟VS这种调试工具的唯一区别就是使用方式不同而已,但是调试命令的应用场景是完全相同的


我们以这份代码为例:

下面是makefile

编译成功

然后我们gdb mytest_debug开始调试

刚进入调试之后是这样的

2.基础指令

l 行号:显示指定行之后的代码(注意:每次只显示10行,想要继续显示回车即可)

一开始这个gdb可能不会从第一行开始显示

所以我们可以l 1从第一行开始显示

一次只显示10行,我们可以回车继续再显示10行

周而复始直到显示完所有行

r: 从开始连续而非单步执行程序
• 1

也就是说如果我们此时没有设置断点,那么我们执行r就会直接运行到程序结束才停

quit:退出gdb

3.断点相关指令

b 行号/函数名/文件名:行号 :在某一行设置断点
(这个文件名:行号就意味着可以指定具体文件设置断点,
这个函数名就是对该函数内部的第一条语句位置设置断点)
info b :查看目前所设置的所有的断点信息。

我们在第15行,17行和19行都设置一个断点

然后info b来查看所有的断点信息

然后我们给Sum函数设置一个断点

然后我们指定test.c这个文件来给第10行设置断点

d n:删除编号为n的断点

然后我们删除3号断点

disable n:  禁用编号为n的断点
enable n:启用编号为n的断点

然后我们禁用4号断点和2号断点,接着启用2号断点

4.范围查找相关操作

目前我们程序还未运行,然后我们执行r,会运行的1号断点的位置(第15行)

c:从一个断点运行到下一个断点(范围查找)

然后我们c,程序会运行到2号断点位置(第17行)

因为我们的3号断点被删除了,4号断点被禁用了

所以我们接着c会运行到5号断点位置(第10行)

第5号断点已经是我们最后一个断点了,接着c,程序会运行到最后才停下

然后我们再info b

会发现:

那么我下一次调试的时候这些断点信息还会在吗?

答案是:不会,这些断点信息会自动清空

我quit退出gdb

然后在进入

然后我重新设置断点

然后我r运行到第4行

finish:将一个函数运行结束就停止下来(范围查找)

然后finish,程序会运行到该函数(Sum)结束为止

然后我想直接运行到第20行

执行until 20

until 行号:在一个范围内,直接运行到指定行(范围查找)

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
4月前
|
安全 Linux iOS开发
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
504 53
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
4月前
|
Linux API iOS开发
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
345 14
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
4月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
559 11
|
6月前
|
存储 监控 Linux
Linux环境锁定关键文件防止误删操作流程。
总结以上内容,在Linux环境下锁定重要文档避免误删涉及到多种技术手段与策略组合运作, 包括但不限于利用chatter指挥官固化文档状态至只读模式、运作ACL精准调整访问权利列表、编排自动化流程简
272 20
|
6月前
|
Linux
Linux环境下的UDEV机制及其与守护进程的关联
实际使用时管理员需要熟悉编写合适udev rules去满足特殊需求;同时也需要注意避免编写过度复杂导致无法预料结果rules.UDEVD虽然稳健但错误配置可能导致无法预料问题因此需谨慎处理相关配置工作.
238 16
|
6月前
|
存储 Linux
Linux环境下删除大文件后磁盘空间未释放问题诊断流程。
以上诊断流程涉及Linux底层机制与高级管理技能结合之处,并需要管理员根据实际环境灵活调整诊断策略与解决方案。
498 8
|
7月前
|
Linux 数据安全/隐私保护 iOS开发
推荐Linux环境下效能优良的双向文件同步工具
综合上述条件,对于Linux环境下的双向文件同步需求,Unison 和 Syncthing 是两个非常出色的选择。它们都有良好的社区支持和文档资源,适用于不同规模的环境,从个人使用到商业部署。Unison 特别适合那些需要手动干预同步过程、需要处理文件冲突解决的场景。而 Syncthing 更加现代化,适合需要自动、实时的数据同步与备份的环境。对于选择哪一个,这将取决于个人的使用场景和具体需求。
827 16
|
7月前
|
安全 应用服务中间件 网络安全
在Linux环境部署Flask应用并启用SSL/TLS安全协议
至此,你的Flask应用应该能够通过安全的HTTPS协议提供服务了。记得定期更新SSL证书,Certbot可以帮你自动更新证书。可以设定cronjob以实现这一点。
503 10