这里显示了个断点,包含要求的四种
这里显示个各个断点的种类
这里是gcc -g编译后使用gdb调试的步骤
这里是修改函数循环次数等于学号2807
1
这里是main函数部分设置断点。
这里是test2里helloc的编译与输出
下面部分:是test1内容
查看帮助文档:
这是break在的第六行的断点。
这是在tb:10的断点
这是sum的函数断点与i==2807的函数断点
这是创建条件断点 b 18 if i == 1403
测试4部分如下:
除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
首先查看相应.c文件是否存在,若存在则应以gcc命令将.c文件生成对应目标文件
将四个模块打包进mymath.a
在main.c引入头文件head.h 后
将main.c与打包的库链接,生成可执行文件myprogram
(注意,mymath的名称不规范,需要mv mymath.a libmymath.a)
对myprogram进行gdb调试,根据要求设置条件断点用来调试:
可以看到,条件为a==10时在第九行停止,断点处值内容用print工具验证无误.
### 2807孟宪聪测试5:
首先,将 add.c、sub.c、mul.c 和 div.c 编译为位置无关代码,这是创建共享库的前提。然后,将它们打包为共享库 mymath.so,因为考虑到需要调试,因此在gcc编译中引入-g
接下来打包成共享库(gcc -shared -o libmymath.so add.o sub.o mul.o div.o),对主程序编译(gcc -g -o myprogram main.c -L. -lmymath)
启动gdb调试(gdb ./myprogram):
接下来需要配共享库中的断点,这里为了保证能够读取到变量,首先配置几个简单的断点,可执行文件初步运行,即配置好break main后逐步运行可执行文件,在读取变量后进行条件断点配置。
完成的条件断点配置内容如下:
break main
break mul if a==8
这里测试条件断点内容:
如图,满足条件a == 8 ,则可执行文件在mul前停止,只输出add与sub。
-----------------------------
测试6
首先将动态库文件夹全盘复制,从而为makefile提供材料
创建Makefile并编辑:
使用make clean清除编译前的内容,重新make:
可见各模块的目标文件被生成且打包,这里我们继续让包链接到我们的main函数里、
继续,运行可执行文件发现出错,原因来自与动态库没有配置路径:
完成路径配置后,可以运行可执行文件