Linux系统之下的基本gdb调试

一、调试的工具

gdb

二、调试的对象

可执行程序,而不是.c文件,调试的对象一定是一个进程。调试时,程序必须带有调试信息,所以在编译链接的过程中,需要加上参数“-g”。

三、调试的命令

l 显示代码 
回车 继续执行上一操作 
b + 行号 加断点 
info + b(break) 查看断点信息 
r 运行程序 
n 下一步,单步执行 
p + 变量名 打印变量的值(p + &变量名 打印变量的地址) 
q 退出调试 
display + 变量名 持续打印 
c 继续执行 
delete + 断点编号 删除断点 
s 进入函数 
finish 跳出函数 
bt 函数调用栈关系(在被调用函数里看能看见自己和调用函数,在调用函数里只能看见自己)

四、实例

1.先编写一个简单的c语言程序——main.c。

内容见下: 


像下面的“gcc -o main main.c”,是无法生成有调试信息的main的,因此无法进行调试。 


加上参数“-g”,才可以进行调试。 


2.正式开始调试:

打印全部的代码 


下断点、查看断点信息 


运行程序 


下一步,查看变量i、arr[i]的值

持续显示变量i、arr[i]的值

继续执行

删除断点

注意删除断点的信息是断点的编号,我先把开始设的断点1号、2号删除了,再新增了两个断点——3号和4号,所以这时候再删除1号断点是不能成功的。

对于后续的调试操作——进入函数、跳出函数和查看函数调用栈关系,我增加了add.c和max.c,再进行新的调试,所有的文件如下:

add.h 


max.h 


add.c 


max.c 


main.c 


首先,将这些程序进行编译、链接,有两种在程序中加入调试信息的方法。

方法一:在add.c、max.c的编译过程中加入调试信息

方法二:在三个程序的编译链接过程中加入调试信息

开始调试:

在调用add()、max()处下断点

进入add(),并且查看函数调用栈关系

退出add(),查看函数调用栈关系

对比上面两张图,可以看到在main里看bt和在add中看bt的差别。同理,在max中能够看到max和main的调用信息,如果max中又调用了另一个函数,则在这个函数中查看bt的话,就能看到三个函数了。

以上,就是比较简单的gdb调试过程,如果想要了解更多关于gdb调试的知识,可以去看看《gdb完全用户手册》,谢谢您的观看。

原文链接:https://blog.csdn.net/qq_39755395/article/details/78305934

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页