Linux编程环境.ppt_第1页
Linux编程环境.ppt_第2页
Linux编程环境.ppt_第3页
Linux编程环境.ppt_第4页
Linux编程环境.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统试验(2) Linux编程环境,2011-03,课程内容,编辑器VI 编译工具GCC 代码调试工具GDB 项目管理工具Make,Linux开发环境,编辑器VI,visual interface,可视化编辑器 vi可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制. 只是一个文本编辑器,不能排版 vi没有菜单,只有命令,命令模式,在该模式下可以通过移动光标进行“删除字符”、“字符串查找”,也可以完成“复制”,“粘贴”与“剪切”的操作,但无法编辑文字。 在shell下输入“VI”或“VI 文件名”就进入了命令模式。,1、移动光标,移动光标h、j、k

2、、l:分别控制光标左、下、上、右移一格。 :移动到行首 ; $:移动到行尾; Ctrl+b: 上滚一屏。 Ctrl+f: 下滚一屏。 Ctrl+d: 下滚半屏。 Ctrl+u: 上滚半屏。 G: 移到文件最后。nG:移动第n行 w: 移到下个字的开头。 b: 跳至上个字的开头。,x: 删除当前光标所在后面一个字符。 nx: 删除当前光标所在后面n个字符。例如,5x表示删除5个字符。 dd: 删除当前光标所在行。 ndd:删除当前光标所在后面n行。例如,5dd表示删除自光标算起的5行。 :n,md:删除从n行到第M行的内容 例如,:1,12d表示删除自行1至行12的文字。 X: 删当前光标的左字

3、符。 D: 删至行尾。,2、删除,3、复制,yw: 拷贝光标处的字到字尾至缓冲区。 P: 把缓冲区的资料贴上来。 yy: 拷贝光标所在之行至缓冲区。 nyy: 例如,5yy,拷贝光标所在之处以下5行至缓冲区。,4. 复原,u: 复原至上一操作。,/word:由首至尾寻找“word”字符串,按n可往下继续找。 ?word:由尾至首寻找“word”字符串,按N可往前继续找。,5. 查找字符串,6.重复操作,.:重复上一次的操作,7.退出,ZZ:保存推出,末行命令方式,在编辑方式下输入“ :”,就进入末行模式 :w 存盘 :q 退出(在未做修改的情况下退出) :wq 存盘并退出 :q! 强行退出:w

4、q! 强行存盘退出:w file将编辑的内容写到 file 文件中去 :set nu: 显示行号 :n,ms/old/new/g 将文件中第n行到m行内的所有的old改成new,GCC编译器,gcc是一个强大的工具集合,它包含了预处理器,编译器,汇编器,链接器等组件。它会在需要的时候调用其他组件。输入文件的类型和传递给gcc的参数决定了gcc调用具体的哪些组件。 对于开发者,它提供的足够多的参数,可以让开发者全面控制代码的生成,这对嵌入式系统级的软件开发非常重要,GCC编译器(cont.),GCC编译流程 GCC的编译流程分为4个步骤,分别为: (1)预处理(Pre-Processing);

5、在该阶段,编译器分析处理源代码文件中的各种宏指令,如include,if等。 (2)编译(Compiling); 在该阶段,GCC首先要检查代码的规范性、是否有语法错误等,在检查无误后,GCC把代码翻译为汇编语言。,GCC编译器(cont.),(3)汇编(Assembling); 在该阶段,编译器把编译生成的汇编代码转成二进制目标代码。 (4)链接(Linking)。 在该阶段,编译器把汇编阶段生成的二进制代码、程序中用到的库文件链接起来,生成可执行文件。 函数库分为静态库和动态库。 静态库:在链接时,静态库的文件代码会被拷贝到可执行文件中。 动态库:链接时,动态库的代码不会被加入可执行文件中

6、,而是在程序被执行的时候加载。,GCC编译器(cont.),GCC的常用选项 GCC的命令行格式:gcc options infile. 常用选项: -c 编译为目标文件,不连接库 -S 编译为汇编代码 -E 预处理.预处理之后的代码将送往标准输出 -Wwarn. 设置警告,可以设置的警告开关很多,通常用-Wall开启所有的警告,GCC编译器(cont.),-O level :设置优化级别,level可以是0,1,2,3或者s,默认为-O0,即不进行优化处理. -Dname=definition: 在命令行上定义宏,有两种方式,-Dname或者-Dname=definition.在命令行上设置

7、宏定义的目的主要是为了在调试的时候设定一些开关,而在发布的时候再关闭或者打开这些开关即可,当然宏定义也用来对代码进行有选择地编译.另外也还有其他的一些作用.,GCC编译器(cont.),-Uname 取消宏定义name,作用和上面的正好相反. -Idir. 把dir加到头文件的搜索路径中,而且gcc会在搜索标准头文件之前先搜索dir. -llibrary 在连接的时候搜索library库.库是一些archieve文件-其成员是目标文件.如果有文件引用library,library在命令行的位置应该在那个文件之后,因此,越底层的库越要放在后面.比如如果你要连接pcap库,那么你就需要使用-lpc

8、ap对源文件进行编译. -Ldir. 把dir加到库文件的搜索路径中,而且gcc会在搜索标准库文件之前先搜索dir.,GCC编译器(cont.),-g 产生调试信息. GDB能够使用这些调试信息。 -o outfile 指定输出文件的文件名,默认为a.out,GDB调试器,Gdb是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具。它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能: 它使你能监视你程序中变量的值. 它使你能设置断点以使程序在指定的代码行上停止执行. 它使你能一行行的执行你的代码.,GDB调试器(cont.),Gdb的使用方法

9、: Gdb option executable-filecore-file or process-id gdb命令. gdb命令分为12类,有上百条命令。,加载和退出命令,gdb filename:在shell下直接加载文件进行调试 file filename:在gdb下通过file命令加载程序进行调试 kill:终止正在调试的程序 quit:退出gdb调试环境,断点控制,break 函数名 或 行号 if 条件 Info break :显示程序中设置的断点; delete breakpoint 断点号:删除指定的断点 clear 断点号:作用同上 disable breakpoint 断点号

10、:禁用指定的断点 enable breakpoint 断点号:允许指定的断点,程序的控制指令,run:程序开始执行,一直运行到断点才终止; Continue:运行到下一个断点; Next:运行下一条指令; Step:运行下一条指令;,变量、参数的设置与查看,list:列出产生执行文件的源代码的一部分. watch 变量名:当变量改变时,显示变量修改前后的值; print 变量名:打印变量值; whatis 变量名或函数名:显示变量或函数的类型; Ptype:显示数据结构的定义; set args:设置程序的运行参数; Show args:显示程序的运行参数;,工程管理器 Make,Make 是

11、用于自动编译、链接程序的实用工具。在开发一个项目时,通常是将项目分成许多功能模块,每个功能模块又可能被分成许多子模块,而这些子模块一般就是一个程序文件。小的项目通常都有十几个或者几十个文件,而大的项目则会有上百个甚至上千个文件。如果要一个一个的编译每个文件,这个工作是非常繁琐的,使用make 后就不需要手工的编译每个程序文件。除了要写一个makefile 文件外,通常所需要做的事情就是在命令行敲入“make”,然后所有的事情都由make 来完成。,工程管理器 Make(cont.),make的使用 usage:make options target 常见的选项: -f FILE以指定的 FIL

12、E 文件作为 makefile。 -n只打印要执行的命令,但不执行这些命令。 -s在执行命令时不显示命令。,工程管理器 Make(cont.),makefile的宗旨就是让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。 默认情况下,GNU make 工具在当前工作目录中按如下顺序搜 makefile: GNUmakefile Makefile,工程管理器 Make(cont.),Makefile的基本结构 一个简单的Makefile文件包含一系列的“规则”,其样式如下:目标(target) : 依赖(pr

13、erequiries)命令(command) 目标(target)通常是要产生的文件的名称,目标的例子是可执行文件或OBJ文件。目标也可是一个执行的动作名称,这样的目标通常称为伪目标(PHONY)诸如clean 。依赖是用来输入从而产生目标的文件,一个目标经常有几个依赖。,工程管理器 Make(cont.),命令是Make执行的动作,一个规则可以含有几个命令,每个命令占一行。 注意:每个命令行前面必须是一个Tab字符,即命令行第一个字符是Tab。这是不小心容易出错的地方。,工程管理器 Make(cont.),试验一:,)使用VI编辑器,将以下代码输入到名为greet.c的文件中,使用GCC编译

14、该程序并执行程序; )此代码的愿意为将main函数中定义的字符串倒序输出,执行后,发现结果显示没有输出,使用分析程序错误的原因,并修改程序,以达到程序预先的目的,#include int display1(char * string); int display2(char * string); int main() char string=“informaiton security”; display1(string); display2(string); int display1(char* string) printf(“the orginal string is %sn”,string); ,int display2(char * string1) char * string2; int size,i; size = strlen(string1); string2 =(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论