




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章程序开发和调试1主要内容vi&vimgccmake&makefilegdbCVS&RCS2开发工具IDEKdevelopEclipseKylix3CommandlineEditor:vi/vim/gvim,emacs/xemacs,geditSourceReader:sourcenavigator;vi/emacs+ctags/etagsConfigureTools:automake,autoconf,m434VIVI的特点VI的模式VI的基本命令VI的高级命令45VI的特点纯文本编辑器全屏幕编辑器工作于3种模式通过命令进行编辑操作UbuntuLinux使用vim56VI的模式三种模式命令模式输入模式末行模式Shell退出vivifile末行模式输入模式转义命令按[Esc]键文本输入命令执行完毕或按[Esc]键命令模式67VI的模式(Cont.)命令模式状态栏编辑区空白区78VI的模式(Cont.)输入模式输入模式标志89VI的模式(Cont.)末行模式末行模式标志910编辑命令命令功能[N]x(Expurgate)删除从光标位置开始的连续N个字符(并复制到编辑缓冲区)[N]dd(Delete)删除从光标位置开始的连续N行(并复制到编辑缓冲区)[N]yy(Yank)复制从光标位置开始的连续N行到编辑缓冲区p(Put)从编辑缓冲区复制文本到当前光标位置(即粘贴)u(Undo)取消上一次操作(即恢复功能)1011光标命令命令功能h方向键,向左移动一个字符,相当于键“←”j方向键,向下移动一行,相当于键“↓”k方向键,向上移动一行,相当于键“↑”l方向键,向右移动一个字符,相当于键“→”:N移动光标到第N行(N待定)1G移动光标到文件的第1行G移动光标到文件的最后1行:setnumber设置显示行号:setnonumber取消显示行号1112文件命令命令功能:q(Quit)退出没有被修改的文件:q!强制退出,且不保存修改过的部分:w(Write)保存文件,但不退出:w!强制保存文件,但不退出:x(Exit)保存文件并退出:x!强制保存文件并退出:wFile另存为File给出的文件名,不退出:w!File强制另存为File给出的文件名,不退出:rFile(Read)读入File指定的文件内容插入到光标位置1213状态命令命令功能a(Append)进入编辑状态,从当前光标之后的位置开始插入键盘输入的字符i(Insert)进入编辑状态,从当前光标之前的位置开始插入键盘输入的字符o(Open)进入编辑状态,并插入一新行,光标移到行首,以后键盘输入的字符将插入到光标位置ESC进入命令状态:!Command在vi中执行外部命令Command,按回车键可以返回vi继续工作1314Linux中vi命令详解14FileNameSuffixC++headerfile.H.hhCorC++headerfile.hC++sourcecode.cc.cp.cpp.CPP.c++.C.cxxCsourcecode.cDynamiclibraryfile(sharedobject).soStaticlibraryfile(archivefile).aObjectfile.o汇编程序.s预处理后的c源程序.i15GCC简介
名称:GNUprojectCandC++Compiler管理与维护GNU项目对C/C++编译的控制–预处理(Preprocessing)–编译(Compilation)–汇编(Assembly)–链接(Linking)基本使用格式$gcc[选项]<文件名>16常用的gcc编译命令选项假设源程序文件名为test.c。1.无选项编译链接用法:#gcctest.c作用:将test.c预处理、汇编、编译并链接形成可执行文件。文件。这里未指定输出文件,默认输出为a.out2.选项-o用法:#gcctest.c-otest作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件17常用的gcc编译命令选项3.选项-c用法:#gcc-ctest.s作用:将汇编输出文件test.s编译输出test.o文件4.选项-O[0、1、2、3]用法:#gcc-O1test.c-otest作用:使用编译优化级别1编译程序。级别别越大优化效果越好,但编译时间越长。缺省的情况为2级优化,0为不进行优化5.选项-g用法:#gcc-gtest.c-otest作用:在可执行文件中加入调试信息,方便用gdb进行程序的调试。18gcc其他选项-Idir:指定额外的头文件搜索路径-Ldir:指定额外的库文件搜索路径-lname:链接时搜索指定的库文件-DMACRO[=DEFN]:定义MACRO宏,相当于C语言中的#defineMACRO=DEFN-xlanguagefilename:设定文件所使用的语言,使后缀名无效-ansi:只支持ANSI标准的C语法。这一选项将禁止GNUC的某些特色,例如asm或typeof关键词。19示例源程序示例源程序—hello.c#include<stdio.h>intmain(void){ printf("hellogcc!\r\n"); return0;}20生成预处理文件命令$gcc–Ehello.c–ohello.i预处理文件hello.i的部分内容......externvoidfunlockfile(FILE*__stream);#679"/usr/include/stdio.h"3#2"hello.c"2intmain(void){ printf("hellogcc!\n"); return0;}21生成汇编文件命令
$gcc–Shello.c–ohello.s汇编文件hello.s的部分内容......main: pushl%ebp movl%esp,%ebp........ addl$16,%esp movl$0,%eax leave ret......"22生成二进制文件生成目标文件$gcc–chello.c–ohello.o生成可执行文件$gcc
hello.c–ohello运行程序$./hellohellogcc!23编译多个文件文件清单greeting.h#ifndef_GREETING_H#define_GREETING_Hvoidgreeting(char*name);#endifmy_app.c#include<stdio.h>#include"greeting.h"#defineN10intmain(void){charname[N];printf("YourName,Please:");scanf("%s",name);greeting(name);return0;}greeting.c#include<stdio.h>#include"greeting.h"voidgreeting(char*name){printf("Hello%s!\r\n",name);}24编译多个文件目录结构(1)–编译命令$gcc
my_app.c
greeting.c
–omy_app目录结构(2)–编译方式(1)$gcc
my_app.c
functions/greeting.c
–omy_app
-Ifunctions25编译多个文件目录结构(2)–编译方式(2)分步编译命令: 1、$gcc
-cmy_app.c-Ifunctions 2、$gcc
-cfunctions/greeting.c 3、$gcc
my_app.o
greeting.o
–omy_app思路: 1、编译每一个.c文件,得到.o的目标文件; 2、将每一个.o的目标文件链接成一个可执行的文件。26LibrariesFiles库是一组预先编译好的函数的集合。标准的库文件一般存储在/lib和/usr/lib目录中。库文件的命名总是以lib开头,如libm.a函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。27LibrariesFilesStaticLibraries(.afiles)gcc-c+arcrv如arcrvlibfoo.abill.ofred.oDynamicLibraries/SharedObjects(.sofiles)共享代码gcc–shared-fPCI该选项指定生成动态连接库
如gcc-shared-fPCI-olibmyhello.sohello.o查看一个可执行程序依赖哪些库
$lddprogram28多个源文件带来的问题/*main.c*/#include“a.h”.../*2.c*/#include“a.h”#include“b.h”.../*3.c*/#include“b.h”#include“c.h”必要时重新编译所有受改动影响的源文件!编译的原则:一旦被依赖的头文件被改,相应的源文件必须新编译!29make&makefileMulti-fileprojectIDEmakemake&makefilemakefile描述模块间的依赖关系;大多数IDE都有这个命令,例如:Delphi的makeVisualC++的nmake,Linux下GNU的makemake命令根据makefile对程序进行管理和维护;make判断被维护文件的时序关系30make命令的选项和参数make[-ffilename][targetname]Filenamemakefile的默认文件名为GNUmakefile、makefile或Makefile。多数Linux程序员使用第三种文件名Makefile。Targets目标通常是一个文件名(编译产生的文件名)。目标也可以是一个要执行的动作,如‘clean’、‘install’如果省略target,make就将生成Makefile文件中定义的第一个目标。建议第一个目标定义为all31Makefile概述Makefile模版:
target...:prerequisites... command ... ...Makefile的规则:
target这一个或多个的目标文件依赖于prerequisites的文件,其生成规则定义在command中。如果prerequisites有一个以上的文件比target文件更新,command所定义的命令就会被执行。
Target表示若干个目标文件ObjectFile,也可以执行文件,还可以是一个标签(Label)。
prerequisites是要生成某个target所依赖的文件或是目标。
command也就是make需要执行的命令,也可以是任意的Shell命令。32#一个简单的Makefile的例子all:myappmyapp:main.o2.o3.o gcc-omyappmain.o2.o3.o#一定要以tab键开头main.o:main.ca.h gcc-cmain.c2.o:2.ca.hb.h gcc-c2.c3.o:3.cb.hc.h gcc-c3.cclean:
rm–f*.oMakefile文件示例33Makefile中的宏宏一般使用大写宇母。定义宏的语法:
MACRNAME=value
引用宏的方法:
${MACRNAME}或$(MACRNAME)34Makefile中的宏作用用于设置编译器的选项,如CFLAGS
设置编译器名,如CC其他自定义宏35all:myapp#WhichcompilerCC=gccINCLUDE=.#OptionsfordevelopmentCFLAGS=-g-Wall-ansi#Optionsforrelease#CFLAGS=-O-Wall-ansimyapp:main.o2.o3.o $(CC)-omyappmain.o2.o3.omain.o:main.ca.h $(CC)–I$(INCLUDE)$(CFLAGS)-cmain.c2.o:2.ca.hb.h $(CC)–I$(INCLUDE)$(CFLAGS)-c2.c3.o:3.cb.hc.h $(CC)–I$(INCLUDE)$(CFLAGS)-c3.c带宏定义的Makefile36Makefile的内置宏定义$@ 规则中的目标名字$< 依赖文件中的第一个$^ 所有的依赖文件$? 依赖文件中所有比目标新的文件37Makefile的特殊字符以下两个特殊字符,出现在命令之前:-:忽略所有错误@:执行某些命令前不将该命令本身输出到屏幕38带特殊字符的例子#SampleMakefileOBJS=hello.omyprog:$(OBJS)$(CC)$(OBJS)-o$@hello.o:hello.c$(CC)-c$<clean: -rm-fmyprog$(OBJS)39多个目标all:myappCC=gccINSTDIR=/usr/local/binINCLUDE=.CFLAGS=-g-Wall-ansimyapp:main.o2.o3.o $(CC)-omyappmain.o2.o3.omain.o:main.ca.h $(CC)–I$(INCLUDE)$(CFLAGS)-cmain.c2.o:2.ca.hb.h $(CC)–I$(INCLUDE)$(CFLAGS)-c2.c3.o:3.cb.hc.h $(CC)–I$(INCLUDE)$(CFLAGS)-c3.cclean: -rmmain.o2.o3.oinstall:myapp @if[-d$(INSTDIR)];\ then\ cpmyapp$(INSTDIR);\ chmoda+x$(INSTDIR)/myapp;\ chmodog-w$(INSTDIR)/myapp;\ echo“Installedin$(INSTDIR)”;\ else\ echo“Sorry,$(INSTDIR)doesnotexist”;\ fi40Makefile的内置规则“.o”目标隐含编译规则用“cc-c”命令编译“.o”文件目标的隐含依赖文件同名的C源文件main.o:main.ca.h2.o:2.ca.hb.h3.o:3.cb.hc.h$makeCC=gccCFLAGS=”-Wall-g”foo$make–p41后缀和模式规则(1).SUFFIXES:.cpp.cpp.o: $(CC)–xc++$(CFLAGS)-c$@$<42后缀和模式规则(2)%.o:%.c $(CC)-c$(CFLAGS)-o$@$<43自动生成Makefile工具GNUAutomake、Autoconf常见的GNU程序一样,使用“./configure”,“make”,“makeinstall”gcc–MM
产生一个适用于make命令的依赖关系清单。44调试工具gdbgdb:GNUDebug设置断点监视变量值单步执行修改变量值45gdbcommands不退出gdb就执行makemake不退出gdb就执行shell命令shell中止正在调试的程序kill执行当前调试的程序run退出gdbquit临时显示表达式的值print显示表达式的值display打开要调试的文件file执行一条语句,是函数则进入函数内部step执行一条语句但不进入函数内部next列出源代码的一部分list设置断点,可以是行号、函数名及地址(以*开头)tbreak:设置临时断点break/tbreak46gdb调试举例47gdb调试举例启动gdbGNUgdb(GDB)7.2-ubuntuCopyright(C)2010FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlater</licenses/gpl.html>Thisisfreesoftware:youarefreetochangeandredistributeit.ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopying"and"showwarranty"fordetails.ThisGDBwasconfiguredas"i686-linux-gnu".Forbugreportinginstructions,pleasesee:</software/gdb/bugs/>.(gdb)48gdb调试举例49gdb调试举例50gdb调试举例51gdb调试举例52gdb调试举例分析 –11行说明name变量被正确赋值(tom) –13行说明name变量值被正确赋予greeting的参数变量name –16说明打印出现了错误,即错误出现在函数greeting中综合分析 –错误出现在greeting.c的第5行 –原因:没有输出字符串的格式不对
改正错误53gdb调试举例动态调试总结 –主要错误类型算法错误输入错误 –定位方法 设置断点 单步步进执行 查看变量取值变化 反复执行,逐步缩小错误范围54使用RCS/CVS来管理源代码Unix在源码管理方面有三个被广泛使用的系统RCS:版本控制系统CVS:协同版本控制系统SCCS:源代码控制系统55RCS的使用RCS主要功能是用来管理文件的版本,可以节省空间和时间。这样就不需要在每个程序开发到某一个阶段就将数据拷贝到其他的地方备份起来了。RCS提供了如下几个最重要的指令:ci指令:将文件放入RCS目录下的控制系统。co指令:从RCS目录下将文件取出。rlog:用来查看文件的改动清单。rcsdiff命令:
用来查看两个版本之间的区别。56RCS-基本操作方式一般而言,RCS所产生出来的文件会放在RCS目录中。所以第一步一般要在当前的目录下创建一个名为RCS的子目录。$mkdirRCS接下来使用ci指令把文件备份到RCS版本控制系统中:$citest.c若要将文件取出,可以使用下列指令:$cotest.c取出来的文件是只读文件,若要取出可以写入的工作文件,可以加上-l参数来锁定它:$co-ltest.c此外将文件放入RCS控制系统时,可以使用-l参数锁定文件,那么目录下的文件依然存在:
$ci-ltest.c
若要比较当前文件和RCS中最新版本文件,使用下列指令:$rcsdifftest.c57RCS-指定版本若不指定版本编号时,co会从RCS取得最新的版本。如果要以特定的版本号码写入RCS或读出,可以使用-r参数选项。$ci-l-r3.25test.c$co-l-r1.2test.c此外,rcsdiff也可以用来指定任何一个版本和当前程序代码进行比较。$rcsdiff-r3.25test.c58CVS的使用CVS(ConcurrentVersionsSystem)协同版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。CVS的基本工作原理:在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。每个用户在使用源代码库之前,要把源代码库里的项目文件下载到本地,然后用户可以在本地任意修改,最后用CVS命令进行提交,由CVS源代码库统一管理修改。59CVS-创建仓库用CVS管理代码,首先要创建一个“仓库”。“仓库”简单来说包含一个目录结构。它包括要管理的源代码和用于管理源代码的各种管理文件。先设置环境变量CVSROOT,指向信息仓库的绝对路径,然后调用CVS的init命令:#CVSROOT=/usr/local/cvsroot;exportCVSROOT#cvsinit#ls-l$CVSROOT60CVS-添加项目的文件、目录到信息仓库要将需要管理的项目加入到仓库,并附上信息。cvsim
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肇庆市实验中学高中生物一:生物膜的流动镶嵌模型习题课
- 2025至2031年中国绢花工艺品行业投资前景及策略咨询研究报告
- 新疆体育职业技术学院《西方艺术里的故事》2023-2024学年第一学期期末试卷
- 2025年中国聚氨酯胶粘鞋料市场调查研究报告
- 新疆艺术学院《音乐基础常识》2023-2024学年第二学期期末试卷
- 信阳职业技术学院《即兴思维与口语表达》2023-2024学年第二学期期末试卷
- 甘肃省平凉市2024年中考数学五模试卷含解析
- 广东省佛山市顺德区市级名校2024届中考数学考前最后一卷含解析
- 2025年员工三级安全培训考试试题含完整答案【典优】
- 2025工厂员工安全培训考试试题附答案(巩固)
- GB 29541-2013热泵热水机(器)能效限定值及能效等级
- FZ/T 07019-2021针织印染面料单位产品能源消耗限额
- 重症医学科各项规章制度汇编
- 社会组织培训概述课件
- 春节作文优秀课件
- 三角函数的应用论文Word版
- 农业创业风险控制与防范培训课件
- 生物制造国内外状况课件
- 幼儿园大班数学口算练习题可打印
- 药物临床试验管理和质量控制课件(PPT 55页)
- 【汇总】高二政治选择性必修三(统编版) 重点知识点汇总
评论
0/150
提交评论