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
相关文章
|
3月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
65 10
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
102 3
|
3月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
160 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
5月前
|
NoSQL Linux C语言
GDB:强大的GNU调试器
GDB:强大的GNU调试器
|
5月前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
90 0
|
6月前
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
391 2
|
6月前
|
NoSQL Linux 开发工具
【深入解析git和gdb:版本控制与调试利器的终极指南】(下)
【深入解析git和gdb:版本控制与调试利器的终极指南】
|
3月前
|
NoSQL
技术分享:如何使用GDB调试不带调试信息的可执行程序
【8月更文挑战第27天】在软件开发和调试过程中,我们有时会遇到需要调试没有调试信息的可执行程序的情况。这可能是由于程序在编译时没有加入调试信息,或者调试信息被剥离了。然而,即使面对这样的挑战,GDB(GNU Debugger)仍然提供了一些方法和技术来帮助我们进行调试。以下将详细介绍如何使用GDB调试不带调试信息的可执行程序。
107 0
|
5月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
45 1
|
5月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
32 0
下一篇
无影云桌面