【Linux开发工具】调试器-gdb
目录
一、前言
二、gdb详解
1.生成debug文件
2.初识gdb
3.cgdb的安装和使用
4.调试技巧
一、前言
gdb(GNU Debugger)是一个强大的命令行调试工具,能够用于各种如C、C++、java、Python等编程语言的程序,使用gdb能帮助我们快速高效定位程序中出现的错误并解决,是Linux中最常用的调试工具之一。
本文将介绍gdb的使用,安装cgdb更直观看见调试界面,以及关于打断点、标变量、逐过程逐语句等调试的基本过程指令,学习本篇将有助于在Linux下更高效地编写程序。
二、gdb详解
1.生成debug文件
程序的发布有两种方式,debug模式和release模式。在Linux下用gcc直接编译出来的文件默认是release模式,也就是优化版本,不包含调试信息,如果我们要去调试程序,必须用debug模式的可执行程序,因此gcc编译时需要带上-g选项:
使用指令:gcc -g code.c -o code 编译出包含调试信息的可执行程序
可以发现加了-g生成的debug可执行程序是比默认生成的要大的,就是因为包含了调试信息。
2.初识gdb
生成了带调试信息的可执行程序后,就可以用gdb初步进行调试了。
输入指令 gdb 可执行程序名 开始调试
输入指令 l 数字n 就可以从n行开始查看代码,使用回车查看下一页
输入指令 b 数字n 在第n行设置断点,使用 r 来运行到断点处,使用 c 运行到下一个断点
3.cgdb的安装和使用
直接用gdb不够直观,很麻烦看不到代码本身运行,此时就推荐安装cgdb来辅助我们调试。
Centos : yum install -y cgdb
Ubuntu : apt-get install -y cgdb
随后直接cgdb 可执行程序名 就可以实现上边是代码,下边是调试信息的界面了。
注: cgdb分屏操作ESC进入代码屏,i回到gdb屏
指令 : b 文件名:数字n 用来给第n行打断点,对应的行号数字会变红
指令 : info b 用来查看断点信息,其中Num表示断点标号,Enb表示使能
指令 :d 断点编号 用来删除断点
指令:disable/enble 断点编号 用来使断点失效/有效
指令 : n 逐过程 s 逐语句 相当于VS调试中的F10和F11
指令 : bt 查看栈帧,系统每一次调用函数都会创建一个栈帧
指令 : finish 结束当前函数的运行,直接跳到进入该函数的地方
指令 : p + 变量 查看临时变量的值
指令:until 数字n 直接跳转到n行
指令:display 变量名 / undisplay 编号 用来让变量长显示/消失(注意undisplay是编号)
指令:info locals 查看函数中所有变量的值
4.调试技巧
指令 watch 变量名 可以用来监视变量,d 编号 用来取消监视,用info b同样能看到。
被监视的变量值被修改了就会通知我们。
指令set var 变量名=数值 可以在函数内部直接改变某个变量的值,用来演示结果被修改后程序是否正确运行。
指令 b 数字n if 条件 用来在第n行设立条件断点
指令conditon 断点编号 条件 用来给已有断点追加条件