上海网站建设专业公司哪家好,黄页推广服务,大型网站建设优化企业,平台代运营环境#xff1a;centos7.6#xff0c;腾讯云服务器Linux文章都放在了专栏#xff1a;【Linux】欢迎支持订阅#x1f339;前言在前文#xff0c;我们已经讲解了vim工具以及gcc/g的使用#xff0c;我们可以进行编写代码以及编译代码了#xff0c;但是还没有学习如何在Linu…环境centos7.6腾讯云服务器Linux文章都放在了专栏【Linux】欢迎支持订阅前言在前文我们已经讲解了vim工具以及gcc/g的使用我们可以进行编写代码以及编译代码了但是还没有学习如何在Linux下对代码进行调试通过本章的学习将学会如何使用gdb对代码进行调试。gdb的安装sudo yum install -y gdb没有配置sudo的可以在root身份下输入 yum install -y gdbgdb的使用debug与release我们知道程序的发布有两个版本Debug与Release版本。Debug调试版本Release发行版本编译器会对我们的代码进行优化而我们一般都是在Debug下进行调试但是Linux下gcc/g生成的二进制程序时Release版本的在此版本下我们无法进行调试所以我们要在gcc编译时加上-g,这样生成的二进制程序就是Debug版了我们可以输入指令readelf -S 可执行程序来查看该程序是否生成调试信息在此版本下我们输入相关指令便可以进行调试。gdb的启动与退出(q)我们在生成debug的可执行程序后直接输入指令gdb 可执行程序名 就可以进入调试状态对该程序进行调试输入q或者quit、ctrl d进行退出gdb。gdb 可执行程序进入调试q/quit/ctrl d退出调试代码的查看(l)我们在这种无图形化界面的Linux下调试时如何看到我们的代码呢很简单只需要输入l或者list就可以查看我们的代码这里我们简单写了一个排序代码来研究gdb的使用。输入llist显示我们的代码默认从中间显示我们在l后面加个数字便可以从指定位置显示。当然我们后续不用再输入指令直接按回车键依然会继续衔接上面的往后打印10行。当我们所有的代码显示全后再次显示则会出现这种情况告知我们以及显示完了。断点操作(b)首先假如我们没有设置断点我们输入rrun此时程序则会从开始一直运行到结束。假如我们设置了断点程序则会运行到断点处进行停止。打断点r运行程序无断点的话直接运行到结束有断点运行到最近的断点处停止r不能在断点间移动即运行到最近断点处后再次输入r则会重新再次运行bbreak 行号在某一行设置断点bbreak 函数名在该函数处设置断点查看断点信息(info)输入info b指令可以查看所有的断点详细信息这里需要注意断点的编号是逐渐累加的也就是说假如我们将该断点取消再次进行设置那么断点的编号就变成了2除非退出gdb否则一直累加。那么问题来了如何取消断点呢也很简单d 断点编号 即可取消该断点逐过程与逐语句调试(n\s)所谓逐过程调试就是对应着vs里的f10即遇到函数不会进入。而逐语句调试对应着vs里的f11遇到函数会进入函数内部。n逐过程调试不会进入函数s逐语句调试会进入函数监视窗口查看变量信息(p)这里我用换一个简单的代码来方便我们进行观察。首先是观察我们的变量信息指令p 变量即可观察我们指定的变量。不过这样有些傻傻的就是我们每次查看变量还得需要输入指令太麻烦了此时我们便可以使用指令display 变量查看变量信息并常显示。当然使用undisplay 编号 即可取消常显示。p 变量查看变量信息display 变量常显示变量信息undisplay 变量编号取消常显示调用堆栈查看(bt)我们知道我们在进入main函数之前main函数的函数栈帧是已经创建好了的同样我们在Linux下也可以查看堆栈调用情况输入指令bt即可VS里main函数函数栈帧的创建Linux下使用gdb调试bt命令观察所调用堆栈跳转指定行until在vs中我们在调试时要想跳转至指定行号的地方我们通常都是f9打断点f5直接运行到该断点来实现跳转但是在gdb中我们可以在不打断点的情况下跳转至我们指定的行号位置。until 行号不打断点情况下直接跳转至指定行数查看变量类型(ptype)我们可以使用命令ptype 变量来查看该变量的类型。断点之间跳转c我们知道vs下可以使用f5来进行断点之间的切换gdb中也可以命令为cvs中的f5vs中使用f5都是处于调试状态下因此gdb也是如此关于gdb的其它一些指令gdb的指令还有很多以上主要讲了几个比较常用的下面我将一些指令也都罗列出来大家感兴趣的可以自己来亲自试验一下fifinish执行到当前函数返回然后挺下来等待命令print(p)打印表达式的值通过表达式可以修改变量的值或者调用函数set var修改变量的值delete breakpoints删除所有断点disable breakpoints禁用断点enable breakpoints启用断点infoi) locals查看当前栈帧局部变量的值end.生活原本沉闷但跑起来就会有风