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
相关文章
|
8月前
|
NoSQL Linux 编译器
GDB符号表概念和在Linux下获取符号表的方法
通过掌握这些关于GDB符号表的知识,你可以更好地管理和理解你的程序,希望这些知识可以帮助你更有效地进行调试工作。
380 16
|
7月前
|
NoSQL Linux 开发工具
Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
本文介绍了yum 包管理工具、Vim 编辑器、gcc/g++ 编译器、gdb 调试器、编译原理及 Makefile 的使用,同时还配备了如何使用,以及图解。旨在帮助读者更好地理解和应用这些工具与技术。
386 0
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
1475 1
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
245 10
|
安全 Linux 测试技术
配置Goby工具环境(win,linux,macOS)
配置Goby工具环境(win,linux,macOS)
1469 2
|
8月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
516 11
|
4月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
538 1
二、Linux文本处理与文件操作核心命令
|
4月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
358 137