GDB调试指南(初级)

2017-01-12 09:52:57来源:作者:CSDN博客人点击

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

例:对于源文件test.c在编译的时候要加-g选项,也就是在编译的时候假如debug调试信息。

gcc -g test.c

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

1、进入debug调试

命令:gdb 可执行文件名

当然,没有加-g选项也能进入GDB调试的,但是因为没有加入debug调试信息,所以不能进入程序内部进行调试,也不能查看变量等等,关于调试的一切操作都不能使用。

2、显示源代码

命令: list(或l):默认接着上次的位置向下显示10行。如果是第一次显示的话,则默认是前10行。

命令: list(或l) +行号:显示已这个行号为基准,上5行和下4行。

例:

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

3、运行程序

命令: run(或r):从开始连续而非单步执行程序。

命令: continue(或c):运行到下一断点处或程序结束处。

单步执行:当程序跑起来之后,我们可以对程序进行单步调试,下面有两条单步调试的指令.

命令: next(或n):不进入函数内部的单步调试指令,这里的不进入函数内部指的是不进入被调函数的内部。

命令: step:进入函数内部的单步调试指令。会进入被调函数的内部。

4、断点

4.1、设置断点

命令: break(或b) 行号:在这行设置断点。

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

4.2、查看断点

命令: info(或i) b(或break):查看断点。

例:

可以看到我们设置了两个断点。注意这里面的Num,GDB会给我们设置的断点进行编号,这个编号在我们取消断点的时候有用。还有就是Disp和Enb。

4.3、删除断点

命令: delete(或d):删除所有断点。

可以看到,d指令删除了所有断点。

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

4.4、启用与禁用断点

上面提到过Enb,Enb是使能的意思,也就是说,当Enb为y的时候,启用这个断点,当Enb为n的时候禁止这个断点,注意禁止不是删除。

启用:enable +断点编号

禁止:disable +断点编号

例:

5、查看变量的值

命令:display 变量名:跟踪查看一个变量,每次停下来都显示它的值。

例:

命令: undisplay 编号:取消对这个编号所对应的变量值的观测。

命令: undisplay:取消对先前设置的那些变量的跟踪。

6、查看函数调用栈桢

命令: breaktrace(或bt):查看各级函数调用以参数。

命令: info(或i) locals:查看当前栈桢局部变量的值。

7、直接跳到某一行

命令: until 行号n:直接跳到第n行。

8、打印及变量或表达式的值

命令: print(或p) 变量或表达式:打印表达式或变量的值

命令: set var 变量或表达式:修改变量或表达式的值。

9、退出调试

命令: kill:退出本次调试,但不退出gdb调试。

命令: quit(或q):退出gdb调试。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台