在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 行号:在一个范围内,直接运行到指定行(范围查找)