Linux下的C编程.ppt
《Linux下的C编程.ppt》由会员分享,可在线阅读,更多相关《Linux下的C编程.ppt(79页珍藏版)》请在三一办公上搜索。
1、第三章 Linux下的C编程基础,本章目标:,熟悉Linux系统下的开发环境熟悉Vi的基本操作熟练Emacs的基本操作熟悉Gcc编译器的基本原理熟练使用Gcc编译器的常用选项熟练使用Gdb调试技术熟悉Makefile基本原理及语法规范,Linux下C语言编程概述,C语言的特点:C语言是“中级语言”,它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言像汇编一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。C语言是结构化的语言。C语言采用代码与数据分离,使程序的各个部分除了必要的信息交流外彼此独立。,C语言的特点:,C语言功能齐全。C语言具有各种各样的数据类型,并引入了指
2、针概念,可使程序效率更高。C语言可移植性强。C语言适合多种操作系统,如DOS,Windows,Linux;也适合多种体系结构,尤其适合在嵌入式领域的开发。,char*f()char a5;char b5;a0=a;a1=b;a2=c;a3=d;a4=e;strcpy(b,a);return b;请问:一:该函数中用a作为一个字符串是否存在问题?二、该函数返回的b是否可用,为什么?,x value is 0 x12345566xAddress is 0 x12ff7c,#include int main(int argc,char*argv)unsigned int x=12345566;pri
3、ntf(x value is 0 x%dn,x);printf(xAddress is 0 x%xn,x value is 0 x123456xAddress is 0 x12ff7cxsize is 4,#include stdio.h“int main(int argc,char*argv)unsigned int x=123456;printf(x value is 0 x%dn,x);printf(xAddress is 0 x%xn,Linux下C语言编程环境概述,(1)编辑器:Linux下的编辑器就如Windows下的word、记事本一样,完成对所录入文字的编辑功能。Linux最常
4、用的编辑器有Vi(Vim)和Emacs。(2)编译连接器 编译是指源代码转化成可执行代码的过程,它所完成的工作如下图所示:,编译过程非常复杂,包括词义、语法和语义的分析,中间代码的生成和优化,符号表的管理和出错处理等。在Linux中最常用的编译器是Gcc编译器。arm-none-linux-gnueabi-gccarm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz 命令:tar xvjf arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz-C/usr/local/arm,Linux下C语言编程环境概述,(
5、3)调试器 调试器不是代码执行必备工具,而是专门为程序员方便调试程序而用的。在编程过程中,往往调试所消耗的时间远远大于编写代码的时间。Gdb是绝大多数Linux开发人员所使用的调试器。(4)项目管理器Linux中的项目管理器“make”有些类似于Windows中Visual C+里的“工程”,它是一种控制编译或者重复编译软件的工具。,Linux下C语言编程环境概述,Vi编辑器,Linux系统提供了一个完整的编译器家族系列:Ed,Ex,Vi和Emacs等;按功能它们可以分为两大类:行编辑器(Ed,Ex)和全屏编辑器(Vi,Emacs)。行编辑器每次只能对一行进行操作。全屏编辑器可以对整个屏幕进行
6、编辑,用户编辑的文件直接显示在屏幕上。,Vi有3种模式,分别为命令行模式、插入模式及底行模式。(1)命令行模式用户在用Vi编辑文件时,最初进入的为一般模式。在该模式中可以通过上下移动光标进行“删除字符”或“整行删除”等操作。(2)插入模式只有在该模式下,用户才能进行文字编辑输入,用户可按Esc键回到命令行模式。,Vi的模式,Vi的模式,(3)底行模式在该模式下,光标位于屏幕的底行。用户可以进行文件保存或退出操作,也可以设置编辑环境,如寻找字符串,列出行号等。,Vi的基本流程,(1)进入Vi,即在命令行键入 Vi hello.c(文件名),此时进入的是命令行模式,光标位于屏幕的上方。(2)在命令
7、行模式下键入i进入到插入模式,可以看到屏幕底部显示有“插入”表示插入模式,在该模式下可以输入文字信息。(3)在插入模式中,输入“Esc”,则当前模式转入命令行模式,并在底行行中输入“:wq”(存盘退出)进入底行模式。,(1)命令行模式的常见功能键。,(2)插入模式的功能键只有一个,即Esc退出到命令行模式。,(2)插入模式的功能键只有一个,即Esc退出到命令行模式。,(3)底行模式的功能键。,(3)底行模式的功能键。,Emacs,Emacs是一款功能强大的编译器,融合了编辑,编译和调试功能。Emacs只有一种模式,即编辑模式,它的命令全靠功能键完成。,注释:C-表示按住Ctrl键的同时键入字符
8、,因此,C-f就表示按住Ctrl键同时键入f。M-表示当键入字符时同时按住Alt键。,Emacs的基本操作,启动Emacs在命令行键入“Emacs文件名”,若文件名缺省,可以在emacs编辑文件后另存时指定。也可以从“编程”emacs”打开。接着可单击任意键进入Emacs的工作窗口。,进入Emacs后,即可进行文件编辑。Emacs光标移动功能键,进入Emacs,Emacs剪切和粘贴,Emacs复制文本,Emacs复制文本包括两步:选择复制区域和粘贴文本选择复制区域的方法:首先在复制起始点(A)按下“C-space”或“C-”使它成为一个表示点,再将光标移至复制结束点(B),再按下“M-w”,就
9、可将A与B之间的文本复制到系统的缓冲区中。再使用功能键C-y将其粘贴到指定位置。,Emacs查找文本,Emacs保存文档,在Emacs中保存文档的功能键为“C-x C-s”,这是在屏幕底下回出现“Wrote/root/workplace/editor/why”字样。Emacs有自动保存机制,自动保存的文件名前后都有一个“#”,例如编辑名为“hello.c”的文件,自动保存后为“#hello.c#”.,Emacs退出文档,退出文档的功能键为“C-x C-c”。,Emacs中的模式,这里所说的模式,是Emacs中的各种辅助环境。Emacs会判断文件的类型,自动选择相应的模式。也可以手动选择各种模式
10、,用功能键“M-x”,然后输入模式的名称。如在C模式下,用户拥有“自动缩进”注释”,“预处理扩展”等功能。在Emacs中用”M-”可以产生一条右缩进的注释。,Gcc编译器,一般来说,系统安装后就已经安装和设定好了gcc。在shell的提示符下键入gcc v,屏幕上就会显示出目前正在使用的gcc的版本,同时这可以确定系统所支持的是ELF还是a.out可执行文件格式,gcc的使用,gcc的使用格式如下:$gcc optionsfilenames其中filenames为所要编译的程序源文件。当使用gcc时,gcc会完成预处理、编译、汇编和连接。前三步分别生成目标文件,连接时,把生成的目标文件链接成可
11、执行文件。gcc可以针对支持不同的源程序文件进行不同处理,文件格式以文件的后缀来识别。,Gcc所支持后缀名解释,Gcc编译流程,Gcc编译流程解析预处理(Pre-Processing)编译(Compiling)汇编(Assembling)链接(Linking),例如对于hello.c源代码如下:#includeint main()printf(“hello!This is our embedded world!n”);return 0;,Gcc编译流程,(1)预处理阶段Gcc指令的一般格式:Gcc选项要编译的文件选项目标文件rootlocalhost Gcc#Gcc E hello.c o h
12、ello.i“-o”指目标文件“.i”文件为已经过预处理的C原始程序“-E”只进行预编译,不做其它处理这一步编译器将stdio.h编译进来。,Gcc编译流程,Gcc编译流程,(2)编译阶段Gcc首先要检查代码的规范性、是否有语法错误等,在检查无误后,Gcc把代码编译成汇编语言。rootloaclhost Gcc#Gcc S hello.i o hello.s,此选项只进行编译而不进行汇编,生成汇编代码。,Gcc编译流程,(3)汇编阶段汇编阶段把编译阶段生成的“.s”文件转成目标文件rootloaclhost Gcc#Gcc c hello.s o hello.o,Gcc编译流程,(4)链接阶段
13、在成功编译后,进入了链接阶段。rootloaclhost Gcc#Gcc hello.o o helloGcc生成可执行文件;rootloaclhost Gcc#./hellohello!This is our embedded world!,Gcc的告警和出错选项,Gdb调试器,Linux系统中包含了GNU 调试程序gdb,它是一个用来调试C和 C+程序的调试器。可以使程序开发者在程序运行时观察程序的内部结构和内存的使用情况。gdb 所提供的一些功能如下所示:运行程序,设置所有的能影响程序运行的参数和环境;控制程序在指定的条件下停止运行;,当程序停止时,可以检查程序的状态;修改程序的错误,并
14、重新运行程序;动态监视程序中变量的值;可以单步执行代码,观察程序的运行状态。,Gdb调试器,gdb程序调试的对象是可执行文件,而不是程序的源代码文件。然而,并不是所有的可执行文件都可以用gdb调试。如果要让产生的可执行文件可以用来调试,需在执行gcc指令编译程序时,加上-g参数,指定程序在编译时包含调试信息。调试信息包含程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。gdb 利用这些信息使源代码和机器码相关联。,Gdb调试器,gdb基本命令 还可以用下面的方式来运行gdb:gdb filename其中,filename是要调试的可执行文件。用这种方式运行gdb可以直接指定想要
15、调试的程序。这和启动gdb后执行file filename命令效果完全一样。也可以用gdb去检查一个因程序异常终止而产生的core文件,或者与一个正在运行的程序相连。gdb支持很多的命令且能实现不同的功能。这些命令从简单的文件装入到允许你检查所调用的堆栈内容的复杂命令,下面列出了在使用gdb 调试时会用到的一些命令。,1)file命令:装入想要调试的可执行文件。2)cd命令:改变工作目录。3)pwd命令:返回当前工作日录。4)run命令:执行当前被调试的程序。5)kill命令:停止正在调试的应用程序。6)list命令:列出正在调试的应用程序的源代码。7)break命令:设置断点。,8)Tbre
16、ak命令;设置临时断点。它的语法与break相同。区别在于用tbreak设置的断点执行一次之后立即消失。9)watch命令:设置监视点,监视表达式的变化。10)awatch命令:设置读写监视点。当要监视的表达式被读或写时将应用程序挂起。它的语法与watch命令相同。11)rwatch命令:设置读监视点,当监视表达式被读时将程序挂起,等侍调试。此命令的语法与watch相同。12)next命令:执行下一条源代码,但是不进入函数内部。也就是说,将一条函数调用作为一条语句执行。执行这个命令的前提是已经run,开始了代码的执行。,13)step命令:执行下一条源代码,进入函数内部。如果调用了某个函数,会
17、跳到函数所在的代码中等候一步步执行。执行这个命令的前提是已经用run开始执行代码。14)display命令:在应用程序每次停止运行时显示表达式的值。15)info break命令:显示当前断点列表,包括每个断点到达的次数。16)info files命令:显示调试文件的信息。17)info func命令:显示所有的函数名。18)info local命令:显示当前函数的所有局部变量的信息。,19)info prog命令:显示调试程序的执行状态。20)print命令;显示表达式的值。21)delete命令:删除断点。指定一个断点号码,则删除指定断点。不指定参数则删除所有的断点。22)Shell命令:
18、执行Linux Shell命令。23)make命令:不退出gdb而重新编译生成可执行文件。24)Quit命令:退出gdb。,Gdb调试举例,rootlocalhost Gdb#gcc g hello.c o hello注意:Gdb进行调试的是可执行文件,而不是如“.c”的源代码,因此要通过Gcc编译生成可执行文件才能用Gdb调试。rootlocalhost Gdb#gdb hello这里在Gdb的启动画面中指出了Gdb的版本号、使用的库文件信息;接下来进入了由“(gdb)”开头的命令行界面了。,(Gdb)l在Gdb中键入“l”就可以查看所载入的文件了。“l”-list“b”-breakpoin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 编程
链接地址:https://www.31ppt.com/p-6511159.html