
各位读者大佬好,我是落羽!一个坚持不断学习进步的学生。 如果您觉得我的文章还不错,欢迎多多互三分享交流,一起学习进步! 也欢迎关注我的blog主页: 落羽的落羽
程序发布的方式有两种,debug模式和release模式。
Linux的gcc/g++,按照我们之前的写法gcc -o @ ^,默认生成的是release版本的程序,是无法进行调试的。要在命令后加-g选项,指定以debug方式发布,debug模式下的程序我们才能进行调试。
gcc -o $@ $^ -g 开始使用gdb/cgdb调试,首先要确定系统里已安装gdb/cgdb,其次要调试的程序确定是debug版本的。
gdb 文件名
gdb和cgdb中,需要用各种指令完成调试过程的不同操作:
ctrl + d或输入quit回车使用gdb,一开始是看不到我们的代码的,要使用l相关命令:
l:显示源代码,每次显示10行l 函数名/文件名:列出指定函数/指定文件的代码l 文件名:行号:列出指定文件以某一行为中的几行代码

但是,实际开发中要靠自己显式出代码,还是很麻烦。因此cgdb诞生了,cgdb是gdb的前端界面增强版本,能够直接将代码显示在屏幕上面,初次之外其他命令操作没有区别:

后面我们就在cgdb中进行演示了。
r:开始调试,从程序开始执行,调试中途随时可以输入r重头调试b [文件名:]行号:在指定行号设置断点info b:查看当前所有断点的信息d:删除所有断点d 断点序号:删除指定序号的断点断点会在行号处标明:

每一个断点都有一个序号,通过info b查看,删除指定断点需要指明这个序号,而不是断点的行号:

c:从当前位置开始连续执行程序,到下一个断点n:单步逐过程执行,遇到函数时不进入函数内部s:单步逐语句执行,遇到函数时进入函数内部f:执行到当前函数返回时until 行号:执行到指定行号gdb/cgdb中,回车自动执行上一条命令
在调试过程中,我们经常需要观察一个变量的值:
p 变量/表达式:打印出变量/表达式的值。
set var 变量 = 值:修改一个变量的值
display 变量:持续显示一个变量的值
undisplay 变量序号:取消对指定序号的变量的持续追踪显示
watch 变量:监视一个变量的值,如果该变量的值在程序运行期间发生变化,cgdb会暂停程序的执行并通知用户。这一命令常用在,如果有不应该被修改的变量,你怀疑他被修改了,就可以watch他。



一个断点,也可以为其设置触发的条件。
b 位置 if 条件 #条件满足时,断点才会生效举个栗子:b 10 if i == 5,表示在第10行新增一个断点,只有 i == 5 时才会生效

也可以给一个已存在断点新增触发条件:
condition 断点序号 条件
非常好理解!
本篇完,感谢阅读