Linux使用gdb调试多文件的C程序

【例】通过vi创建两个.c文件main.c和add.c:

在这里插入图片描述

一步编译main.c和add.c文件,并加入调试信息:

在这里插入图片描述

1. 在被调函数中加断点时,在执行主函数时,会自动进入被调函数

(1)进入gdb,跟踪main程序:

在这里插入图片描述

(2)显示代码

输入l显示的是当前main.c的代码:

在这里插入图片描述
输入l 文件名:行号显示另一个文件中的代码:

输入l add:1显示add.c的代码

在这里插入图片描述

(3)设置断点

①在当前显示的文件中加断点

因为刚刚输入l add:1显示add.c的代码,所以此时加断点,是在add.c中加断点:

在这里插入图片描述
在这里插入图片描述

②显示别的文件,在别的文件中加断点

输入l main:1显示main.c中的代码:

在这里插入图片描述

这时可以在main.c中加断点:

在这里插入图片描述

③给指定函数加断点

给指定函数加断点是在函数开始的地方加了断点

在这里插入图片描述

(4)启动程序

输入r启动程序:

在这里插入图片描述
遇到第一个断点停止。

输入n单步执行:

在这里插入图片描述

查看a的值:

在这里插入图片描述

查看b的值:

由于此时b还没有赋值,因此b的值为0

在这里插入图片描述

查看a+b的值:

在这里插入图片描述

查看a和b的地址:

在这里插入图片描述

然后可以输入c继续执行,直到遇到第二个断点:

在这里插入图片描述

这里自动进入了函数add是因为在add里面加了断点。

继续单步执行:

在这里插入图片描述

此时,查看d的值:

在这里插入图片描述

继续执行,执行结果d的值也是5:

在这里插入图片描述
(5)退出gdb

在这里插入图片描述

2. 不在被调函数中加断点时,不会进入这个被调函数的内部

(1)进入gdb,跟踪main程序

在这里插入图片描述

(2)显示代码

直接显示main.c文件中的代码:

在这里插入图片描述

(3)设置断点

在这里插入图片描述

(4)运行程序

在这里插入图片描述

连续单步执行:

在这里插入图片描述

此时,如果继续单步执行,就会默认执行通过add:

在这里插入图片描述

查看d的值,仍然是正确的:

在这里插入图片描述

可以发现虽然gdb没有跟踪到add内部,跳过了add函数内部的执行过程,通过单步执行,add执行直接可以通过。

(5)退出gdb

在这里插入图片描述

3. 没有在被调函数加断点时怎么进入被调函数

(1)进入gdb,跟踪main程序

在这里插入图片描述

(2)显示代码

直接显示main.c文件中的代码:

在这里插入图片描述

(3)设置断点

在这里插入图片描述

(4)运行程序

在这里插入图片描述

此时,如果要进入add函数的内部,要输入s

在这里插入图片描述

可以看到,这时就进入到add函数内部了。

当确定add函数内部没有错误时,退出add函数,输入finish

在这里插入图片描述

这时就退出了add函数,重新回到了main函数。

(5)退出gdb

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/NuYoaH502329/article/details/132249193