linux编程环境

上传人:j7****6 文档编号:61821161 上传时间:2018-12-13 格式:PPT 页数:34 大小:393KB
返回 下载 相关 举报
linux编程环境_第1页
第1页 / 共34页
linux编程环境_第2页
第2页 / 共34页
linux编程环境_第3页
第3页 / 共34页
linux编程环境_第4页
第4页 / 共34页
linux编程环境_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《linux编程环境》由会员分享,可在线阅读,更多相关《linux编程环境(34页珍藏版)》请在金锄头文库上搜索。

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! 强行退出 :

4、wq! 强行存盘退出 :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库,那么你就需要使用-

8、lpcap对源文件进行编译. -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,Mak

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

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

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

14、中,使用GCC编译该程序并执行程序; )此代码的愿意为将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

15、”,string); ,int display2(char * string1) char * string2; int size,i; size = strlen(string1); string2 =(char*)malloc(size+1); for(i=0;isize;i+) string2size-i=string1i; string2size+1=0; printf(“the changed string is%sn ”,string2); ,试验二:,将上述的程序中的函数定义部分另存为文件hello.h,将主函数实现部分另存为hello.c, 在两个程序所在目录下编写makefile文件,然后调用make工具生成可执行目标print。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号