目录
一、gdb概述:
二、list(查看源文件代码):
三、run(运行程序):
四、断点相关操作:
1、查看断点:
2、在指定行设置断点:
3、在函数入口处设置断点:
4、删除断点
5、禁用断点 / 启用断点
五、逐过程调试 / 逐语句调试:
1、逐过程调试:
2、逐语句调试:
六、常显示 / 去除常显示 :
1、常显示:
2、去除常显示:
3、打印变量名:
七、跳转至指定行与退出gdb:
1、跳转至指定行:
2、退出gdb:
一、gdb概述:
- 程序在发布时会有两种版本:Debug版本和Release版本。
- Debug版本和Release版本其实就是优化级别的区别
- Debug称为调试版本,编译的结果通常包含有调试信息,没有做任何优化,方便开发人员进行调试。
- Release称为发布版本,不会携带调试信息,同时编译器对代码进行了很多优化,使代码更小,速度更快,发布给用户使用,给用户使用以更好的体验。
- 在我们申请内存时,Debug模式会多申请一部分空间,分布在内存块的前后,用于存放调试信息。
- 在Release模式下,编译器会对代码进行很多的优化操作,所以Release模式比Debug模式花的时间也会更多。
而在Linux下 gcc/g++ 下生成的二进制程序默认是Release版本。要想进行调试操作就得要在源代码生成二进制程序时加上 -g 选项,将其改为Debug模式。
在接下来使用gdb调试时以以下代码为样例进行演示:
#include <stdio.h>int Sum(int n) {int i = 1, sum = 0;for (; i <= n; i++){sum += i;}return sum; }int main() {printf("%d\n", Sum(100));return 0; }
二、list(查看源文件代码):
list 指令可以在命令行显示源文件对应的代码,一次显示十行,可以简写成l,有两种用法:
1:l 行号 (从对应行号开始在命令行输出源文件代码,一次显示十行)
2:l 函数名 (在命令行中输出对应函数的源代码)
三、run(运行程序):
run指令可以直接运行程序,如果程序没有断点则将程序运行到结束
四、断点相关操作:
1、查看断点:
info break(可简写为:i b)查看断点:
2、在指定行设置断点:
break 行号(可简写为:b 行号)
例如:分别在14、15、16行处打一个断点
3、在函数入口处设置断点:
break 函数名(可简写为:b 函数名)
例如:在函数Sum处打一个断点
4、删除断点
删除指定断点:delete Num(可简写为d Num)Num为断点的序号
删除全部断点:delete break(可简写为d break)
5、禁用断点 / 启用断点
禁用指定断点:disable Num Num为断点的序号
启用指定断点:enable Num Num为断点的序号
五、逐过程调试 / 逐语句调试:
1、逐过程调试:
step(可以简写为s)
2、逐语句调试:
next(可以简写为n)
六、常显示 / 去除常显示 :
1、常显示:
display 变量名 / 地址 每次执行语句时都会在命令行中打印常显示变量的值
2、去除常显示:
undisplay 对应的编号
3、打印变量名:
p 变量名 在命令行中打印对应变量的值
七、跳转至指定行与退出gdb:
1、跳转至指定行:
until 指定行
2、退出gdb:
quit(可简写为q)