滕健伟--1315212033--嵌入式实验五实验报告.docVIP

滕健伟--1315212033--嵌入式实验五实验报告.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

滕健伟--1315212033--嵌入式实验五实验报告

嵌入式原理与应用实验

实验五gcc编译程序与gdb调试程序

学号1315212033

姓名滕健伟

班级13电子二班

华侨大学电子工程系

{

res=1;

}

elseif(y==1)

{

res=x;

}

else

{

res=x*unsgn_pow(x,y-1);

}

returnres;

}

创建静态库,然后编译主程序,并运行结果。

(3)针对(2)的程序,创建动态库,然后编译主程序,并运行结果。对比两者的区别。

(4)对下面程序进行优化编译,对比优化前后的结果,并解释说明结果。

#includestdio.h

intmain(void)

{

doublecounter;

doubleresult;

doubletemp;

for(counter=0;counter2000.0*2000.0*2000.0/20.0+2020;

counter+=(5-1)/4){

temp=counter/1979;

result=counter;

}

printf(“Resultis%lf\\n”,result);

return0;

}

对程序进行优化之后,可以明显看出程序运行的时间大大缩短了,提高了程序运行的效率。

2、用gdb调试程序的bug

(1)使用vi编辑器,将以下代码输入到名为greet.c的文件中。此代码的原意为输出倒序main函数中定义的字符串,但结果显示没有输出。代码如下所示:

#includestdio.h

intdisplay1(char*string);

intdisplay2(char*string);

intmain()

{

charstring[]=EmbeddedLinux;

display1(string);

display2(string);

}

intdisplay1(char*string)

{

printf(Theoriginalstringis%s\n,string);

}

intdisplay2(char*string1)

{

char*string2;

intsize,i;

size=strlen(string1);

string2=(char*)malloc(size+1);

for(i=0;isize;i++)

{

string2[size-i]=string1[i];

}

string2[size+1]=;

printf(Thestringafterwardis%s\n,string2);

}

(2)使用gcc编译这段代码,注意要加上“-g”选项以方便之后的调试。

(3)运行生成的可执行文件,观察运行结果。

观察这段代码并分析得知,代码所要实现的功能为将预先输入的一段字符串倒序输出,由运行结果可知,最后输出结果为空,产生了错误输出,但程序本身语法并不存在错误。

使用gdb调试程序,通过设置断点、单步跟踪,一步步找出错误所在。

首先使用gdb调试器打开所要调试文件,再通过gdb中的命令字符list(l)查看载入的文件的代码。由观察分析知,在25行和29行设置断点最为合适,设置断点后查看所设置断点处的信息。

紧接着运行代码,当程序运行到断点25处时自动停止,此时,通过命令“p”+变量名称查看变量值,此处,我选择查看size,string1和string2的值,通过对原程序的分析可知,size为字符串string1的大小,正确;string1显示为EmbeddedLinux,正确;而string2通过内存分配获得了相应的内存,此时string2为空值;正确。

选择继续运行代码,代码运行到29处时停止,重复上一步操作可知string2[0]为空值,而

string[1~13]均相对应的值,说明原程序中循环嵌套语句中出现了计算错误,错误语句为:

String2[size-i]=string1[i];

纠正错误,更改源程序并得到正确的结果。

将上述语句更改为string2[size-i-1]=string1[i],再将程序重新编译一次,运行后得到正确结果。

三、记录实验步骤及运行结果

参考gcc的各种选项,设计完成上面实验的步骤,将运行结果截图,并对结果进行解释说明。

文档评论(0)

151****2506 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档