【linux上机实验】实验七 Linux开发工具的使用(二)
因为第一题只是演示,从第二题开始做。
如需查看最后提交的完成文档请下载(文档的作用是为了让大家明白提交作业时该截什么样的图,该写什么命令,因为文档中很多步骤没有,所以做作业请按照博客步骤做,很详细!!!)
2.利用gcc 编译下列C 语言程序,查看运行结果,如果有错用gdb调试之。
创建程序名为bugging.c的文件(题目要求的是这个文件名,不要改)
1.命令:vi bugging.c
2.将下面的内容粘贴到bugging.c中:
#include<stdio.h>
double average_(int array[],int *min,int *max,int num)
{
int i ,s=0;
double ave;
*min=*max=array[0];
for(i=1;i<num;i++)
{ if(array[i]>*max)
*max=array[i];
if(array[i]<*min)
*min=array[i];
s+=array[i];
}
ave=s*1.0/num;
return ave;
}
int main(void)
{
int i,max,min;
int a[5]={3,5,1,4,6};
double aver;
aver=average_(a,&min,&max,5);
for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
printf("min=%d,max=%d,aver=%.2f\n",min,max,aver);
return 0;
}
3.编译该程序:
命令:gcc -o bugging -g bugging.c
4.运行该程序:
命令:./bugging
机子作出如下响应:
求平均值结果不对,为了查找该程序中出现的问题,我们利用gdb,并按如下的步骤进行:
(1)进入 gdb,装入可执行文件,命令为:gdb bugging
(2)利用list 1命令查看程序代码,命令为:list 1
(3)在主函数定义数组地方先设置一个断点,命令为:
首先查看数组所在行数:list 1
命令: break 20
(查看自己的定义数组所在的位置在多少行,这里就写多少,我的是20行)
(4)要得到正确的平均值,累加结果必须正确,所以在求累加和的地方再设置一个断点, 命令为:
再次查看累加和所在行数:用上面查看数组的方法再次查看累加和所在的位置,并设置断点
命令: break 12
(查看自己的累加和所在的位置在多少行,这里就写多少,我的是12行)
(5)查看所设断点信息,命令为:info b
(6)暂时取消断点1,命令为:disable 1
查看断点信息。
(7)重新让断点1有效,命令为:enable 1
查看断点信息。
(8)运行程序,命令为:run
(9)程序会在所设置的第一个断点处停止,显示:
Breakpoint 1, main () at sy7_2.c:21
21 int a[5]={3,5,1,4,6};
(gdb)
(10)用print命令查看数组a的内容,命令为:print a
数组中数是些什么数?
答:数组中数是 4196160, 0, 4195472, 0, -6560
(11)单步不跟踪运行程序,命令为:next
再用p命令查看数组a的内容。截屏:
命令: p a
(12)单步跟踪运行程序,命令为:
显示:
(gdb) s
average_ (array=0xbffff2e4, min=0xbffff308, max=0xbffff304, num=5)
at sy7_2.c:4
4 int i ,s=0;
(gdb)
(13)运行到断点处,命令为:continue
(14)程序会在所设置的第二个断点处停止,显示:
Breakpoint 2, average_ (array=0xbffff2e4, min=0xbffff308, max=0xbffff304,
num=5) at sy7_2.c:13
13 s+=array[i];
(gdb)
(15)单步运行程序,执行累加,查看累加结果,命令为:print s
(16)发现累加的不是数组中的第一个数,找到错误所在。
出错点为:在average_函数中,由于循环从1开始,而不是从0开始,导致第一个数没有被累加到。
(17)清除所设断点,命令为:delete 1 ;delete 2
(18)退出gdb,命令为:ctrl+D或输入quit
(19)进入vi修改程序命令为:vi bugging.c
保存文件退出vi环境命令为: :wq
(20)重新编译运行程序,给出正确结果截图。
命令1:gcc -o bugging -g bugging.c
命令2:./bugging
正确结果截图
本文来自博客园,作者:Cloudservice,转载请注明原文链接:https://www.cnblogs.com/whwh/p/17850502.html,只要学不死,就往死里学!