GDB调试指南(初级)

GDB是Linux环境下的代码调试工具。如果我们在linux下面写代码的话,可以用GDB对程序进行调试。源代码经过编译之后生成的程序程序有两种:relese版本和debug版本。要想对程序进行调试的话就要在debug版本下面进行调试,因为debug版本下面加入了许多调试信息。在linux下面编写出来的代码是relese版本的,所以我们要想对程序进行调试的话,就必须在生成源代码的时候加上-g选项。
例:对于源文件test.c在编译的时候要加-g选项,也就是在编译的时候假如debug调试信息。
gcc -g test.c

下面我们就来介绍一下常用的GDB调试指令,掌握这几条命令的话就可以进行简单的gdb调试了:

1、进入debug调试
命令:gdb 可执行文件名
GDB调试指南(初级)_第1张图片
当然,没有加-g选项也能进入GDB调试的,但是因为没有加入debug调试信息,所以不能进入程序内部进行调试,也不能查看变量等等,关于调试的一切操作都不能使用。

2、显示源代码
命令: list(或l):默认接着上次的位置向下显示10行。如果是第一次显示的话,则默认是前10行。
命令: list(或l) +行号:显示已这个行号为基准,上5行和下4行。
例:
GDB调试指南(初级)_第2张图片

命令: list(或l) 函数名:显示某个函数的内容,同样的也是一次显示10行。

3、运行程序
命令: run(或r):从开始连续而非单步执行程序。
命令: continue(或c):运行到下一断点处或程序结束处。

单步执行:当程序跑起来之后,我们可以对程序进行单步调试,下面有两条单步调试的指令.
命令: next(或n):不进入函数内部的单步调试指令,这里的不进入函数内部指的是不进入被调函数的内部。
命令: step:进入函数内部的单步调试指令。会进入被调函数的内部。

4、断点
4.1、设置断点
命令: break(或b) 行号:在这行设置断点。
命令: break(或b) 函数名: 在这个函数开头设置断点。

4.2、查看断点
命令: info(或i) b(或break):查看断点。
例:
GDB调试指南(初级)_第3张图片
可以看到我们设置了两个断点。注意这里面的Num,GDB会给我们设置的断点进行编号,这个编号在我们取消断点的时候有用。还有就是Disp和Enb。

4.3、删除断点
命令: delete(或d):删除所有断点。
可以看到,d指令删除了所有断点。
GDB调试指南(初级)_第4张图片

命令: delete(或d) n:删除编号是n的断点。

4.4、启用与禁用断点
上面提到过Enb,Enb是使能的意思,也就是说,当Enb为y的时候,启用这个断点,当Enb为n的时候禁止这个断点,注意禁止不是删除。
启用:enable +断点编号
禁止:disable +断点编号
例:
GDB调试指南(初级)_第5张图片

5、查看变量的值
命令:display 变量名:跟踪查看一个变量,每次停下来都显示它的值。
例:
GDB调试指南(初级)_第6张图片

命令: undisplay 编号:取消对这个编号所对应的变量值的观测。
命令: undisplay:取消对先前设置的那些变量的跟踪。

6、查看函数调用栈桢
命令: breaktrace(或bt):查看各级函数调用以参数。
命令: info(或i) locals:查看当前栈桢局部变量的值。

7、直接跳到某一行
命令: until 行号n:直接跳到第n行。

8、打印及变量或表达式的值
命令: print(或p) 变量或表达式:打印表达式或变量的值
命令: set var 变量或表达式:修改变量或表达式的值。

9、退出调试
命令: kill:退出本次调试,但不退出gdb调试。
命令: quit(或q):退出gdb调试。

你可能感兴趣的:(linux,c/c++基础,linux点滴,linux,gdb)