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
相关文章
|
5月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
626 11
|
7月前
|
存储 监控 Linux
Linux环境锁定关键文件防止误删操作流程。
总结以上内容,在Linux环境下锁定重要文档避免误删涉及到多种技术手段与策略组合运作, 包括但不限于利用chatter指挥官固化文档状态至只读模式、运作ACL精准调整访问权利列表、编排自动化流程简
364 20
|
7月前
|
Linux
Linux环境下的UDEV机制及其与守护进程的关联
实际使用时管理员需要熟悉编写合适udev rules去满足特殊需求;同时也需要注意避免编写过度复杂导致无法预料结果rules.UDEVD虽然稳健但错误配置可能导致无法预料问题因此需谨慎处理相关配置工作.
254 16
|
7月前
|
存储 Linux
Linux环境下删除大文件后磁盘空间未释放问题诊断流程。
以上诊断流程涉及Linux底层机制与高级管理技能结合之处,并需要管理员根据实际环境灵活调整诊断策略与解决方案。
544 8
|
7月前
|
Ubuntu 安全 Linux
Ubuntu 24.10 发行版登场:Linux 6.11 内核、GNOME 47 桌面环境
Ubuntu 24.10 还带来了 GNOME 47,增强了性能和稳定性,并引入了新功能。此版本的 Ubuntu 还默认在采用 Nvidia 显卡的硬件上切换到 Wayland,并在支持的硬件上默认使用开源的 Nvidia 560 内核模块。 另外需要注意的是,Ubuntu 24.10 是稳定版本,但作为非 LTS 版本,仅支持 9 个月。
|
7月前
|
安全 Linux 网络安全
Linux系统初步设置本地Git环境和生成SSH密钥的步骤。
现在您的Linux系统已经配置好了Git环境,并创建并添加了SSH密钥,可以安全地与远端仓库进行交互,无论是克隆、推送还是拉取操作。此过程确保了数据传输的安全并使版本控制流程更为顺畅。使用Git时应考虑定期更新并管理您的凭据,以确保安全性。
1010 0
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
548 1
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
282 10
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
1038 3