《实验三linux环境c语言开发工具剖析》由会员分享,可在线阅读,更多相关《实验三linux环境c语言开发工具剖析(42页珍藏版)》请在金锄头文库上搜索。
1、1,实验三 linux环境C语言开发工具,一、实验目的: 1、 掌握VI(VIM)的使用方法; 2、 掌握嵌入式C语言的编译方法; 3、 掌握程序的调试和执行方法。,2,实验三 linux环境C语言开发工具,二、实验要求: 1、认真阅读电子版教材,学习VI的使用方法; 2、用Vi编写一简单C语言程序; 3、编程C语言程序; 4、调试和运行C语言程序; 5、书写实验报告。,3,三、实验原理,vi是Linux系统中的全屏幕文本编辑器,是最常用的文本编辑工具软件之一。vi是字符界面下最常用的编辑工具,其功能强大,占用资源少,但不支持鼠标操作。现在出现了图形界面下的vi,称为VIM,启动菜单选项为“开
2、始应用程序实用工具VIM编辑器”,支持鼠标操作,有类似其他软件的菜单和快捷按钮。字符界面下vi的操作规则可以用在图形界面下的VIM中,本书主要介绍字符界面的vi。 vi有命令行状态和文本编辑两种状态,vi的命令行状态的命令丰富,功能强大,在命令行状态下按Insert键或者输入i、I、a等字符进入编辑状态,在编辑状态按Esc键可以回到命令行状态。,4,(1)命令行模式 用户在用vi编辑文件时,最初进入的为一般模式。在该模式中可以通过上下移动光标进行“删除字符”或“整行删除”等操作,也可以进行“复制”、“粘贴”等操作,但无法编辑文字。,(3)底行模式 在该模式下,光标位于屏幕的底行。用户可以进行文
3、件保存或退出操作,也可以设置编辑环境,如寻找字符串、列出行号等。,(2)插入模式 在该模式下,用户才能进行文字编辑输入,用户可按ESC键回到命令行模式。,vi编辑器的3种模式,5,在命令提示符下输入命令vi,回车后,即可启动vi编辑器,启动vi编辑器,6,编辑文件,启动vi编辑器时,vi编辑器处于命令模式,敲击键盘i键,进入文本输入模式,接下来可以输入字符,用Backspace或者Del键删除字符,用回车键控制换行,用上下左右光标键移动位置。请按下图编辑文件。,7,保存退出退出,按Esc键,使vi进入命令模式,然后按shift+:进入底行模式 然后输入命令 :wq 文件名 保存退出 例如 :w
4、q hello.c 注释:wq(write quit的缩写) 或者输入命令 :q! 不保存退出,8,打开/新建文件,vi 目录名 文件名 如果给出的文件名是目录下不存在的文件,则vi编辑器会新建一个文件,并等待用户输入信息。如果给出的文件名是目录下已经存在的文件,则vi编辑器会打开此文件,并显示文件的内容。 如:vi /etc/passwd 回车后打开/etc目录下的passwd文件 例:在提示符下输入:vi hello.c,9,打开文件,打开文件后,处于命令行模式,按i进行插入模式,或按shift+:键进入底行模式。,按shift+:键进入底行模式后输入:Set nu,显示行号,10,打开文
5、件,在命令行模式下按i键进入插入模式,可对文件修改,修改后按esc键及shift+:键进入底行模式,输入q!回车后强制不保存退出。,11,VI命令行模式功能键,12,vi编辑器的三种模式切换,六种进入方式 i 在光标左侧输入正文 I 在光标所在行的行首输入正文 a 在光标右侧输入正文 A 在光标所在行的末尾输入正文 o 在光标所在行的下面增加新行,并在新行的行首输入正文 O 在光标所在行的上面增加新行,并在新行的行首输入正文,13,尝试进入vi编辑器文本模式的六种方式 实验一种方式后,文本输入模式下按ESC键,可以使vi编辑器切换到命令模式下按ESC键回到命令模式下,就可以再实验另一种方式了!
6、,vi编辑器的三种模式,vi编辑器处于任何模式下时(即文本输入模式和末行模式,或者不清楚当前是什么模式),只需按ESC键即可进入命令模式,14,进入末行模式,命令模式下输入 : / ? 看到vi编辑器界面左下角出现提示信息,vi编辑器就进入了末行模式。,15,末行模式下,保存但不退出vi编辑器 :w 保存并退出vi编辑器 :wq 不保存退出vi编辑器 :q :q!,16,末行模式下,另存为 :w filename 保存文件,并命名为filename,不退出vi编辑器 :wq filename 保存文件,并命名为filename,并退出vi编辑器 :w! filename 有相同文件名的文件存在
7、,覆盖它! 我发现了有重名文件,可是我没有权限看它的内容,但是我能覆盖它,也实现了改变它内容的目的,这是为什么?,17,末行模式下,搜索字符串 /要搜索的字符串 #向下搜索 ?要搜索的字符串 #向上搜索 输入n键,可以在多个匹配项之间进行切换,18,末行模式下,vi编辑器在线帮助 :help 仔细阅读帮助文件的开始,如何移动光标,如何跳转到相应帮助主题,如何从某一主题返回到上层主题,如何退出帮助?,19,gcc编译器,Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级
8、编译器,其执行效率与一般的编译器相比平均效率要高20%30%。 gcc编译器能将C、C+语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别。,20,GCC编译器介绍,21,编译器GCC的使用,GCC编译工具由C语言源程序生成可执行文件的过程并不单单是一个编译的过程,而要经过下面的几个过程。 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接
9、(Linking),22,gcc编译的4个过程:,预处理(也称预编译,Preprocessing): 命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。 编译(Compilation): 接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。 汇编(Assembly): 汇编过程是针对汇编语言的步骤,调用as进行工作。 连接(Linking): 当所有的目标文件都生成之后,gcc就调用 ld来完成最后的关键性工作,这个阶段就是连接,23,gcc最基本的用法是 gcc options f
10、ilenames options:编译器所需要的编译选项 filenames:要编译的文件名,编译器GCC的使用,gcc编译器的编译选项大约有100多个,其中多数我们根本就用不到,这里只介绍其中最基本、最常用的参数。 如果 options选项选项,gcc就给出预设的可执行文件a.out。(演示),常用格式: gcc C源文件 -o 目标文件名 或: gcc -o 目标文件名 C源文件 或: gcc C源文件,24,编译器GCC的使用,GCC编译选项,编译选项有总体选项、告警和出错选项、优化选项和体系结构相关选项。,25,编译器GCC的使用,1、没有任何选项:gcc hello.c 结果会在和h
11、ello.c相同的目录下产生一个a.out的可执行文档。,26,编译器GCC的使用,用vi打开hello.c把void修改成int后保存退出,重新用gcc编译就不会出现警告。,运行生成的可执行文件,27,编译器GCC的使用,2、-o选项,指定输出文档名: 例:gcc -o helloworld hello.c -o意思是Output即需要指定输出的可执行文档的名称。这里的名称为helloworld。,使用-o选项产生可执行文件过程如下图所示。,由上次实验可知,白色代表着普通文件,蓝色代表着目录,绿色代表可执行文件。,28,编译器GCC的使用,3、-c选项,只编译,不汇编连接:gcc -c he
12、llo.c -c意思就是Compile,产生一个叫hello.o的目标文档,29,编译器GCC的使用,4、-S选项,产生汇编源文档: 例:gcc -S hello.c -S意思就是aSsemble,产生一个叫hello.s的汇编源文档,30,编译器GCC的使用,5、-E选项,预处理C源文档 ,-E意思就是prEprocess,即只进行预处理,不做其他处理。 例:gcc -E hello.c 预处理hello.c文档,输出不是送到一个文档而是标准输出。,把stdio.h的内容贴了进来,并在屏幕上输出。,31,编译器GCC的使用,5、-E选项,预处理C源文档。,例:gcc -E hello.c -
13、o hello.i,预处理hello.c文档,并将结果送到hello.i文件中。可用cat hello.i查看hello.i文件的内容。,32,编译选项,6、 -static:静态链接库文件 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libhello.so libhello.a。当使用静态库时,连接器找出程序所需的函数,然后将它们拷贝到可执行文件,一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样,动态库会在执行程序内留下一个标记指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库。 例:gcc
14、static hello.c -o hello1,用静态键接库生成hello1可执行文件,然后用ll命令查看大小,会发现helloworld比hello1小得多。,33,7、 -g选项 调试选项,产生供gdb调试用的可执行文件,生成的可执文件大小明显比只用-o选项编译汇编连接后的文档大。 例:gcc -g hello.c o hello2,编译选项,34,Gcc总体选项列表,编译选项,35,GCC选项,三、优化选项 Gcc可以对代码进行优化,它通过编译选项“-On”来控制优化代码的生成,其中n是一个代表优化级别的整数。对于不同版本的Gcc来讲,n的取值范围及其对应的优化效果可能并不完全相同,比
15、较典型的范围是从0变化到2或3。 不同的优化级别对应不同的优化处理工作。如使用优化选项“-O”主要进行线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops)两种优化。使用优化选项“-O2”除了完成所有“-O1”级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度等。选项“-O3”则还包括循环展开和其他一些与处理器特性相关的优化工作。,36,编译选项,Gcc体系结构相关选项列表,37,调试器GDB的使用,应用程序的调试是开发过程中必不可少的环节之一。Linux 下的GNU 的调试器称为GDB(GNU Debugger) 。,GDB所提供的一些功能。 1
16、、启动程序,并且可以设置运行环境和参数来运行指定程序。 2、让程序在指定断点处停止执行。 3、对程序做出相应的调整,这样就能纠正一个错误后继续调试。,38,调试器GDB的使用,启动GDB,Gcc使用g参数后就可以生成GDB使用的调试文件,如对以前用g参数生成的hello2文件调试。,在此输入命令,39,调试器GDB的使用,查看源文件,相关命令为:list 例:,40,调试器GDB的使用,设置断点,在main处设置断点,在5行处设置断点,查看断点,删除断点1,断点信息表中,num:断点号;Type:断点类型;Disp:断点状态;Enb:表示断是否启用;Address:断点的内存地址;What:断点在源文件中的位置。,41,GDB命令,42,五、实验报告要求,1、总结实验过程; 2、vi的三种模式是什么?每种模式下能进行哪些操作? 3、用vi编辑c语言源程序的流程是什么? 4、总结gcc的使用方法; 5、总结gdb的使用方法