




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 Linux系统下C编程 文字编辑器vi 主要内容和要求一.了解vi编辑器的作用和功能二.熟悉vi的操作环境和切换方法三.掌握vi操作的方式(几个常用键)四.了解常用的快捷键一.vi编辑器概述 vi编辑器是各种UNIX/Linux系统都会支持的全屏幕文字编辑器,与Windows下的文字编辑器相比,vi的使用要麻烦一些,但功能强大,并且是UNIX/Linux缺省编辑器。任何一位UNIX/Linux系统管理者都应该学会用vi。 vi的操作环境是针对熟悉UNIX系统的使用者而设计,初学者必须多加练习。 二.vi的操作环境和切换方法vi 共分为三种模式(1)命令模式:命令模式为vi的初始模式,可以使用
2、“上下左右”按键来移动光标,您可以使用“删除字符”或“删除整行”来处理文档。在编辑模式或指令列模式中按【ESC】键可换回命令模式。(2)编辑模式:在命令模式中按下【i, I, o, O, a, A, r, R】等字母之后才会进入编辑模式。按下上述的字母时,在画面的左下方会出现【 -INSERT- 或 -插入- 】的字样,才可以做文字数据输入。 (3)指令列模式:在命令模式当中,输入 【:】或【 / 】就可以将光标移动到最底下那一行,进入指令列模式。在这个模式当中,可以存盘、结束vi 、显示行号等操作。 二.vi的操作环境和切换方法命令模式编辑模式指令列模式按i, I, o, O, a, A,
3、r, R按 : 或 / 按ESC三.掌握vi操作的方式(几个常用键)进入vi开始编辑:$vi 新文件名例如:$vi newfile (打开名为newfile的旧文档,或新编一个名为newfile的新文档) 刚开启vi时为命令模式,按下【i, I, o, O, a, A, r, R】等字母之后会进入编辑模式。 编辑完毕按下【ESC】返回命令模式操作;在命令模式中按下【:】或【/】可进入指令列模式。 在指令列模式中(有【:】提示时),可输入w(存档)、q(离开vi)、wq(存档并离开vi)、q!(不存档离开vi)、h或help(在线说明)、以及其它搜寻取代等指令。再按【ESC】回到命令模式。即:
4、:w- 将编辑的文本存盘。:w!- 若文件属性为“只读”时,强制存盘:q- 退出 vi :q!-退出且不存盘。:wq-存盘并退出主要内容gcc简介功能命令安装利用gcc编译c程序利用make工具简化编译过程make简介Makefile基本格式调试静态调试动态调试gdb调试工具的使用gcc简介简介: Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%30%。 安装 首先查看linux系统是否安装了gcc, #rpm
5、qa|grep gcc 如果没有安装,需要安装gcc-3.2.2-5,libgcc-3.2.2,compat-gcc-7.3-2.96.118,gcc-g77-3.2.2-5几个软件包。对C/C+编译的控制(GCC的编译过程)预处理(Preprocessing)gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。 编译(Compilation)Gcc调用cc1进行编译,这个阶段根据输入文件生成汇编语言。 汇编(Assembly)Gcc调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀
6、的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。 链接(Linking )Gcc调用ld来完成连接工作,生成可执行文件。 gcc的使用基本使用格式 $ gcc 选项 常用选项及含义gcc常用选项选项含义-o file将经过gcc处理过的结果存为文件file,这个结果文件可能是预处理文件、汇编文件、目标文件或者最终的可执行文件。假设被处理的源文件为source.suffix,如果这个选项被省略了,那么生成的可执行文件默认名称为a.out;目标文件默认名为source.o;汇编文件默认名为source.s;生成的预处理文件则发送到标准输出设备。gcc的常用选项gcc常用选项选项含义
7、-c仅对源文件进行编译,不链接生成可执行文件。在对源文件进行查错时,或只需产生目标文件时可以使用该选项。-ggdb在可执行文件中加入调试信息,方便进行程序的调试。如果使用中括号中的选项,表示加入gdb扩展的调试信息,方便使用gdb来进行调试-O0、1、2、3对生成的代码使用优化,中括号中的部分为优化级别,缺省的情况为2级优化,0为不进行优化。注意,采用更高级的优化并不一定得到效率更高的代码。-Dname=definition将名为name的宏定义为definition,如果中括号中的部分缺省,则宏被定义为1gcc的常用选项gcc常用选项选项含义-Idir在编译源程序时增加一个搜索头文件的额外目
8、录dir,即include增加一个搜索的额外目录。-Ldir在编译源文件时增加一个搜索库文件的额外目录dir-llibrary在编译链接文件时增加一个额外的库,库名为library.a-w禁止所有警告-Wwarning允许产生warning类型的警告,warning可以是:main、unused等很多取值,最常用是-Wall,表示产生所有警告。如果warning取值为error,其含义是将所有警告作为错误(error),即出现警告就停止编译。gcc文件扩展名规范 gcc可以根据文件扩展名执行操作gcc文件扩展名规范扩展名类型可进行的操作方式.cc语言源程序预处理、编译、汇编、链接.C,.cc,
9、.cp,.cpp,.c+,.cxxc+语言源程序预处理、编译、汇编、链接.i预处理后的c语言源程序编译、汇编、链接.ii预处理后的c+语言源程序编译、汇编、链接.s预处理后的汇编程序汇编、链接.S未预处理的汇编程序预处理、汇编、链接.h头文件不进行任何操作.o目标文件链接使用gcc编译代码源代码示例源程序hello.c#include int main(void)printf(hello gcc!rn);return 0;生成预处理文件命令$gcc E hello.c o hello.i预处理文件hello.i的部分内容.extern void funlockfile (FILE *_stre
10、am) ;# 679 /usr/include/stdio.h 3# 2 hello.c 2int main(void) printf(hello gcc!n); return 0;生成汇编文件命令$gcc S hello.c o hello.s汇编文件hello.s的部分内容.main:pushl%ebpmovl%esp, %ebp.addl$16, %espmovl$0, %eaxleaveret.编译多个文件文件清单greeting.h #ifndef _GREETING_H #define _GREETING_Hvoid greeting (char * name);#endif gr
11、eeting.c #include #include greeting.hvoid greeting (char * name)printf(Hello %s!rn,name); my_app.c #include #include greeting.h#define N 10int main(void)char nameN; printf(Your Name,Please:); scanf(%s,name); greeting(name); return 0; 生成二进制文件生成目标文件命令:$gcc c hello.c o hello.o生成可执行文件命令:$gcc hello.c o h
12、ello运行程序$./hellohello gcc!编译多个文件目录结构(1)编译命令$ gcc my_app.c greeting.c o my_app目录结构(2)编译方式(1)$gcc my_app.c functions/greeting.c o my_app -I functionsgreeting.h./greeting.cmy_app.cgreeting.h./greeting.cmy_app.cfunctions编译多个文件目录结构(2)编译方式(2)分步编译命令:1、$gcc -c my_app.c -Ifunctions 2、$gcc -c functions/greeti
13、ng.c3、$gcc my_app.o greeting.o o my_app思路:编译每一个.c文件,得到.o的目标文件;将每一个.o的目标文件链接成一个可执行的文件;使用make工具适用场合:多个文件组成的软件项目基本格式:目标:欲生成的目标文件依赖项:生成目标需要的文件原理:判断依赖项是否为最新,否则,生成新的目标make工具的使用格式:make 命令选项 命令参数通常使用make就可以了,make会寻找Makefile作为编译指导文件;目标:依赖项列表(Tab缩进)命令使用make工具Makefile示例Makefile文件1my_app:greeting.o my_app.o2gcc
14、 my_app.o greeting.o -o my_app3greeting.o:functions/greeting.c functions/greeting.h4gcc -c functions/greeting.c5my_app.o:my_app.c functionsgreeting.h6gcc c my_app.c Ifunctions使用make工具目标的依赖关系my_appmy_app.ogreeting.omy_app.cfunctionsgreeting.hfunctionsgreeting.cgcc c my_app.c Ifunctions gcc -c functio
15、nsgreeting.c gcc my_app.o greeting.o -o my_app 使用make工具更实用的Makefile更实用的Makefile文件1OBJS = greeting.o my_app.o2CC = gcc3CFLAGS = -Wall -O g4my_app:$OBJS5$CC $OBJS -o my_app6greeting.o:functions/greeting.c functions/greeting.h7$CC $CFLAGS -c functions/greeting.c8my_app.o:my_app.c functions/greeting.h9$
16、CC $CFLAGS -c my_app.c -Ifunctions调试调试静态调试:在程序编译阶段查错并修正错误;主要为语法错误:输入错误;类型匹配错误;排错方式:利用错误、警告信息,并结合源文件环境排错动态调试:在程序运行阶段差错并修正错误;主要错误类型:算法错误;输入错误;排错方式:利用调试工具定位并修正错误;调试举例源文件greeting.h #ifndef _GREETING_H #define _GREETING_Hvoid greeting (char * name);#endif greeting.c #include #include greeting.hvoid greet
17、ing (char * name)printf(Hello !rn); my_app.c 1#include 2#include greeting.h3#define N 104int main(void)56char namen; 7printf(Your Name,Please:); 8scanf(%s,name)9greeting(name); 10/*return 0;*/ 11 静态调试举例分块编译greeting.c$gcc -g -Wall -c functions/greeting.c-g:将调试信息加入到编译的目标文件中 ;-Wall:将编译过程中的所有级别的警告都打印出来
18、;无错误my_app.c$gcc -g -Wall -c my_app.c -Ifunctions参数含义同上错误信息:调试举例错误信息:错误记录格式:文件名:行号:错误描述my_app.c: In function main:my_app.c:6: n undeclared (first use in this function)my_app.c:6: (Each undeclared identifier is reported only oncemy_app.c:6: for each function it appears in.)my_app.c:9: parse error bef
19、ore greetingmy_app.c:6: warning: unused variable name静态调试举例分析、定位错误(警告):my_app.c的第6行:描述含义:n是一个没有声明的变量;分析:声明数字name时用到了变量n,但变量n在之前没有声明;改正:声明一个新变量n;或者将n改为宏N这里取第2种改正方法;静态调试举例my_app.c的第9行:描述含义:在“greeting”之前出现解析错误;分析:c中每行程序以;结束,第9行greeting之前的程序行没有以;结束;改正:第8行末尾增加“;”重新编译错误信息:my_app.c: In function main:my_app
20、.c:11: warning: control reaches end of non-void function静态调试举例分析、定位错误(警告):警告:my_app.c的11行描述含义:控制以非空函数结束;分析:main函数返回类型为int,源程序没有以return 整数形式结束;改正:将main改为返回void类型;或者:在main程序后增加return 返回语句;采用第2种解决方式;重新编译,无错误或警告信息,完成静态调试静态调试举例静态调试总结主要为语法错误:输入错误;类型匹配错误;分析信息:主要来自gcc编译时产生的提示信息错误警告定位:不一定在提示信息描述的地方;综合分析提示信息及
21、提示行的上下文环境,定位并修正错误、警告。有的警告可以不用修复;动态调试举例 常见的动态调试方法:增加调试语句 ;记录程序的执行状况 ;观察内存变化 ;使用调试工具;GNU Debuger的功能:启动程序,设置程序执行的上下文环境;在指定的条件下停止程序;程序停止时,检查程序的状态;在程序运行时,改变程序状态,使其按照改变后的状态继续执行。动态调试举例gdb常用的调试命令命令含义file指定需要进行调试的程序step单步(行)执行,如果遇到函数会进入函数内部next单步(行)执行,如果遇到函数不会进入函数内部run启动被执行的程序quit退出gdb调试环境print查看变量或者表达式的值bre
22、ak设置断点,程序执行到断点就会暂停起来shell执行其后的shell命令list查看指定文件或者函数的源代码,并标出行号动态调试举例对静态调试中的例子继续进行动态调试工具:gdb启动gdb$gdbGNU gdb Red Hat Linux (5.3post-0.20021129.18rh)Copyright 2003 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distr
23、ibute copies of it under certain conditions.Type show copying to see the conditions.There is absolutely no warranty for GDB. Type show warranty for details.This GDB was configured as i386-redhat-linux-gnu.(gdb)启动命令启动提示启动完毕动态调试举例调试指定程序(./my_app)问题:期望的输出和实际输出不一致(gdb) file ./my_appReading symbols from
24、./my_app.done(gdb) runStarting program: /home/tom/shell_script/cpp/my_app/my_appYour Name,Please:tomHello !Program exited normally.(gdb)加载调试程序启动调试程序程序输出提示信息动态调试举例初次错误定位:输出有错误错误定位重新开始一次调试;启动gdb;加载调试程序(./my_app);查看程序源代码命令:list 文件名动态调试举例(gdb) list my_app.c:1,201#include 2#include greeting.h3#define N 104int main(void)56char nameN;7printf(Your Name,Please:);8scanf(%s,name);9greeting(nam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业产值与种植面积对比表
- 年度营销计划数据对比表
- 建筑行业劳务分包与施工管理协议
- 企业智能办公系统开发合作协议
- 合作推广市场营销合作协议
- 课程表和活动安排表
- 日常办公管理规章制度汇编
- 空调安装工程总包合同
- 高中学生物理竞赛准备故事征文
- 科学启蒙故事征文
- 第五章产前检查及高危妊娠监测90课件
- 专利共有合同范例
- JJF1033-2023计量标准考核规范
- 《基于舞弊风险因子的辉山乳业公司财务舞弊案例探析》15000字(论文)
- 2024年全国“纪检监察”业务相关知识考试题库(附含答案)
- 抖音火花合同电子版获取教程
- 文本排版习题
- 四川省德阳市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 租赁合同审批表
- 数据库及其应用-重点复习资料.代码02120
- 岩石坚固性和稳定性分级表
评论
0/150
提交评论