还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实习报告(2009—2010学年第2学期)课程名称软件设计方法班级学号姓名指导教师年月
一、目的
1、学习并掌握__C编译程序过程和方法;GDB调试程序的方法和__ke工程管理器的基本使用方法以及工程中文件和路径的安排;
2、学习__Eclipse__环境和Eclipse__环境的使用;练习使用该软件实现相关程序功能
二、内容和要求
一、基本要求
1、学习并掌握__C编译程序过程和方法;
2、学习并掌握GDB调试程序的方法;
3、学习并掌握__ke工程管理器的基本使用方法;
4、学习并掌握工程中,文件和路径的安排;
5、使用上述知识和技能,编写程序,完成实数的四则运算功能
二、提高要求
1、__Eclipse__环境;
2、学习Eclipse__环境的使用;
3、在Eclipse下,编写程序,完成实数的四则运算功能;
4、在Eclipse下,编写程序,完成1024点的FFT程序
三、发挥部分根据自己的程序__水平,完成其他可展示功能程序
三、过程(如实际程序__、电子制作,详细说明有关原理、__过程、调试过程、结果)
一、基本要求
1、Linux__C编译过程
1、使用__C编译程序时编译过程可以被细分为四个阶段:预处理Pre-Pro__ssing这个过程处理宏定义和include,并做语法检查编译Compiling这个阶段,生成汇编代码汇编Assembling这个阶段,生成目标代码链接Linking链接过程生成可执行代码链接分为两种,一种是静态链接,另外一种是动态链接使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大使用动态链接的好处是,生成的程序比较小,占用较少的内存◆预处理Pre-Pro__ssing使用-E参数可以让__C在预处理结束后停止编译过程:#__c-Ehello.c-ohello.i◆编译Compiling#__c–Shello.c–ohello.s◆汇编Assembling下一步是将hello.s编译为目标代码这可以通过使用-c参数来完成:#__c-xcpp-output–chello.i-ohello.o或者#__c-chello.i-ohello.o◆链接Linking#__chello.o-ohello
2、__c主要参数-o定义输出文件-E完成预处理/预编译停止-S完成编译后停止,生成.s,不汇编-c只汇编生成.o,不连接-x指定编译步骤-ggdb调试用,在可执行程序中包含标准调试信息
3、实例编译#vihello.c#includestdio.hint__invoid{ printfHelloworldLinuxprogramming!\n; return0;}编译#__c-Ehello.c-ohello.i#__c-Shello.i#__c-chello.s#__c hello.o-ohello#./helloHelloworldLinuxprogramming!
2、Gdb调试程序
1、功能作用◆启动你的程序,可以按照你的自定义的要求的运行程序;◆可让被调试的程序在你所指定的调置的断点处停住(断点可以是条件表达式);◆当程序被停住时,可以检查此时你的程序中所发生的事;◆动态的改变你程序的执行环境;
2、常用指令1)file命令装入想要调试的可执行文件2)cd命令改变工作目录3)pwd命令返回当前工作日录4)run命令执行当前被调试的程序5)kill命令停止正在调试的应用程序 6)list命令列出正在调试的应用程序的源代码7)break命令设置断点8)tbreak命令;设置临时断点它的语法与break相同区别在于用tbreak设置的断点执行一次之后立即消失9)watch命令设置监视点,监视表达式的变化10)awatch命令设置读写监视点当要监视的表达式被读或写时将应用程序挂起它的语法与watch命令相同11)rwatch命令设置读监视点,当监视表达式被读时将程序挂起,等侍调试此命令的语法与watch相同12)next命令执行下一条源代码,但是不进入函数内部也就是说,将一条函数调用作为一条语句执行执行这个命令的前提是已经run,开始了代码的执行13)step命令执行下一条源代码,进入函数内部如果调用了某个函数,会跳到函数所在的代码中等候一步步执行执行这个命令的前提是已经用run开始执行代码14)display命令在应用程序每次停止运行时显示表达式的值15)infobreak命令显示当前断点列表,包括每个断点到达的次数16)infofiles命令显示调试文件的信息17)infofunc命令显示所有的函数名18)infolocal命令显示当前函数的所有局部变量的信息19)infoprog命令显示调试程序的执行状态20)print命令;显示表达式的值21)delete命令删除断点指定一个断点号码,则删除指定断点不指定参数则删除所有的断点22)Shell命令执行LinuxShell命令23)__ke命令不退出gdb而重新编译生成可执行文件24)quit命令退出gdb
3、实例编译首先,打开Linux下的编辑器Vi,编辑如下代码/*test.c*/#includestdio.hintsumintm;int__in{ intin=0; sum50; fori=1;i=50;i++ { n+=i; } printfThesumof1-50is%d\nn;}intsumintm{ intin=0; fori=1;i=m;i++ n+=i; printfThesumof1-mis%d\nn;}在保存退出后首先使用__c对test.c进行编译,注意一定要加上选项“-g”,这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该可执行文件[root@localhostgdb]#__c-gtest.c-otest[root@localhostgdb]#gdbtest接下来便可进行gdb各项指令的使用了
3、__ke工程管理器的基本使用方法
1、基本知识一个简单的__kefile描述规则组成TARGET...:PREREQUISITES...COM__ND...target规则的目标通常是最后需要生成的文件名或者为了实现这个目的而必需的中间过程文件名可以是.o文件、也可以是最后的可执行程序的文件名等另外,目标也可以是一个__ke执行的动作的名称,如目标“clean”,我们称这样的目标是“伪目标”prerequisites规则的依赖生成规则目标所需要的文件名列表通常一个目标依赖于一个或者多个文件com__nd规则的命令行是规则所要执行的动作(任意的shell命令或者是可在shell下执行的程序)它限定了__ke执行这条规则时所需要的动作注意每一个命令行必须以[Tab]字符开始,[Tab]字符告诉__ke此行是一个命令行,__ke按照命令完成相应的动作这是书写__kefile中容易产生,而且比较隐蔽的错误
2、文件和路径的安排在一个较大的工程中,一般会将源代码和二进制文件(.o文件和可执行文件)安排在不同的目录来进行区分管理这种情况下,可以使用__ke提供的目录搜索依赖文件功能(在指定的若干个目录下自动搜索依赖文件)在__kefile中,使用依赖文件的目录搜索功能当工程的目录结构发生变化后,就可以做到不更改__kefile的规则,只更改依赖文件的搜索目录
1、一般搜索(变量VPATH)通过变量“VPATH”可以指定依赖文件的搜索路径,当规则的依赖文件在当前目录不存在时,__ke会在此变量所指定的目录下去寻找这些依赖文件通常我们都是用此变量来指定规则的依赖文件的搜索路径其实“VPATH”变量所指定的是__kefile中所有文件的搜索路径,包括了规则的依赖文件和目标文件定义变量“VPATH”时,使用空格或者冒号(:)将多个需要搜索的目录分开__ke搜索目录的顺序是按照变量“VPATH”定义中的目录顺序进行的(当前目录永远是第一搜索目录)例如对变量的定义如下VPATH=src:../headers这样我们就为所有规则的依赖指定了两个搜索目录,“src”和“../headers”对于规则“foo:foo.c”如果“foo.c”存在于“src”目录下,此规则等价于“foo:src:/foo.c”通过“VPATH”变量指定的路径在__kefile中对所有文件有效当需要为不类型的文件指定不同的搜索目录时,需要使用另外一种方式
2、选择性搜索(关键字vpath)另一个设置文件搜索路径的方法是使用__ke的“vpath”关键字它不是一个变量,而是一个__ke的关键字,它所实现的功能和上一小节提到的“VPATH”变量很类似,但是它更为灵活它可以为不同类型的文件(由文件名区分)指定不同的搜索目录它的使用方法有三种
1、vpathPATTERNDIRECTORIES为所有符合模式“PATTERN”的文件指定搜索目录“DIRECTORIES”多个目录使用空格或者冒号()分开类似上一小节的“VPATH”变量
2、vpathPATTERN清除之前为符合模式“PATTERN”的文件设置的搜索路径
3、vpath清除所有已被设置的文件搜索路径vapth使用方法中的“PATTERN”需要包含模式字符“%”“%”意思是匹配一个或者多个字符,例如,“%.h”表示所有以“.h”结尾的文件如果在“PATTERN”中没有包含模式字符“%”,那么它就是一个明确的文件名,这样就是给定了此文件的所在目录,我们很少使用这种方式来为单独的一个文件指定搜索路径在“vpath”所指定的模式中我们可以使用反斜杠来对字符“%”进行引用(和其他的特使字符的引用一样)“PATTERN”表示了具有相同特征的一类文件,“DIRECTORIES”则指定了搜索此类文件目录当规则的依赖文件列表中的文件不能在当前目录下找到时,__ke程序将依次在“DIRECTORIES”所描述的目录下寻找此文件例如vpath%.h../headers其含义是__kefile中出现的.__件;如果不能在当前目录下找到,则到目录“../headers”下寻找注意这里指定的路径仅限于在__kefile文件内容中出现的.__件并不能指定源文件中包含的头文件所在的路径(在.c源文件中所包含的头文件路径需要使用__c的“-I”选项来指定)在__kefile中如果存在连续的多个vpath语句使用了相同的“PATTERN”,__ke就对这些vpath语句一个一个进行处理,搜索某种模式文件的目录将是所有的通过vpath指定的符合此模式的多个目录,其搜索目录的顺序由vpath语句在__kefile出现的先后次序来决定多个具有相同“PATTERN”的vpath语句之间相互__下边是两种方式下,所有的.c文件的查找目录的顺序(不包含工作目录,对工作目录的搜索永远处于最优先地位)比较vpath%.cfoovpath%blishvpath%.cbar表示对所有的.c文件,__ke依次查找目录“foo”、blish”、“bar”而vpath%.cfoo barvpath%blish对于所有的.c文件__ke将依次查找目录“foo”、“bar”、“blish”
3、递归调用__ke的递归过程指的是在__kefile中使用“__ke”作为一个命令来执行本身或者其它__kefile文件的过程递归调用在一个存在有多级子目录的项目中非常有用例如,当前目录下存在一个“subdir”子目录,在这个子目录中有描述此目录编译规则的__kefile文件,在执行__ke时需要从上层目录(当前目录)开始并完成它所有子目录的编译那么在当前目录下可以使用这样一个规则来实现对这个子目录的编译subsystem:cdsubdir$__KE
4、实例编译要求在home目录下创建std文件夹,用于存放sum、minus、multi、div四个文件夹以及__in.c和__kefile文件,其中sum等四个文件夹用于存放各自的.o、.h以及各自的__kefile文件/*__in.c*/#includestdio.h#includeadd.h#includeminus.h#includemulti.h#includediv.hint__in{floata;floatb;printf请输入2个实数a和b(注意b不等于0)\n;scanf%f%fab;printfa+b=%f\naddab;printfa-b=%f\nminusab;printfa*b=%f\nmultiab;printfa/b=%f\ndivab;return0;}__kefile编写vpath%add.csumvpath%add.hsumvpath%add.osumvpath%minus.cminusvpath%minus.hminusvpath%minus.ominusvpath%multi.cmultivpath%multi.hmultivpath%multi.omultivpath%div.cdivvpath%div.hdivvpath%div.odivo__=__in.osum/add.ominus/minus.omulti/multi.odiv/div.otest:$o____c-o$@$o____in.o:__in.cadd.hminus.hmulti.hdiv.h__c-c$-Isum-Iminus-Imulti-Idivsubsystem:cdsum$__KEcdminus$__KEcdmulti$__KEcddiv$__KE
二、Eclipse__环境的使用1启动Eclipse,选择File-New-Project;2根据需要展开C或C++,选择其中的__naged__keCProject或__naged__keC++Project3输入工程的名称注意不要使用中文名后完成4进入C/C++透视图(Perspective)在左边的C/C++Projects视图中选择工程,新建文件(New-File),输入文件名在新窗口中输入程序的代码5调试运行
四、小结通过本次课程设计,我学到了很多软件__相关知识首先我在Linux系统下进行练习,能够运用一些基本命令语句了然后我重点学习并掌握了__C编译程序过程和方法;GDB调试程序的方法和__ke工程管理器的基本使用方法以及工程中文件和路径的安排;最后我还了解并学习Eclipse__环境的使用,在Eclipse下进行相关程序的调试运行在基本操作中,我结合老师所给的资料以及网上搜索,能够比较熟练地运用相关指令进行__C和GDB的编译和使用Linux系统下的__c(GNUCCompiler)是GNU推出的功能强大、性能优越的多平台编译器,可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%GDB能让你观察另一个程序在执行时的内部活动,或程序出错时发生了什么在练习使用__ke工程管理器时,开始对此较为陌生,无从下手,后来通过网上搜索相关教程以及实例,渐渐明白其中的规则由于在编写四则运算是要求将相关文件存放在指定目录中,所以要求掌握文件和路径的安排通过上网查找资料,学会了vpath的使用在学习Eclipse__环境的使用中,我发现该软件的功能很强大,了解到Eclipse的内核很小,其他功能都是基于这个内核上的插件,如Eclipse自带的UNIT、ANT等而且Eclipse还开放了自己的插件机制,并提供了很好的插件__环境,让用户可以自己来__Eclipse的插件通过本次课程设计,我发现了自身存在的不足,并及时制定相关计划以补充学习;另外,我进一步了解到理论学习和实践操作的差距与__;更重要的是,这一周的学习与实践,激发了我对软件__的进一步学习的兴趣我想在今后的学习中,我会更深入地了解和学习软件__的相关知识成绩日期批阅人。