Linux程序设计.ppt

上传人:wj 文档编号:18068912 上传时间:2023-08-08 格式:PPT 页数:50 大小:581.50KB
下载 相关 举报
Linux程序设计.ppt_第1页
第1页 / 共50页
Linux程序设计.ppt_第2页
第2页 / 共50页
Linux程序设计.ppt_第3页
第3页 / 共50页
Linux程序设计.ppt_第4页
第4页 / 共50页
Linux程序设计.ppt_第5页
第5页 / 共50页
Linux程序设计.ppt_第6页
第6页 / 共50页
Linux程序设计.ppt_第7页
第7页 / 共50页
Linux程序设计.ppt_第8页
第8页 / 共50页
Linux程序设计.ppt_第9页
第9页 / 共50页
Linux程序设计.ppt_第10页
第10页 / 共50页
Linux程序设计.ppt_第11页
第11页 / 共50页
Linux程序设计.ppt_第12页
第12页 / 共50页
Linux程序设计.ppt_第13页
第13页 / 共50页
Linux程序设计.ppt_第14页
第14页 / 共50页
Linux程序设计.ppt_第15页
第15页 / 共50页
Linux程序设计.ppt_第16页
第16页 / 共50页
Linux程序设计.ppt_第17页
第17页 / 共50页
Linux程序设计.ppt_第18页
第18页 / 共50页
Linux程序设计.ppt_第19页
第19页 / 共50页
Linux程序设计.ppt_第20页
第20页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Linux程序设计.ppt

《Linux程序设计.ppt》由会员分享,可在线阅读,更多相关《Linux程序设计.ppt(50页珍藏版)》请在冰点文库上搜索。

Linux程序设计.ppt

Linux下的C/C+程序设计,Linux下的C/C+程序设计介绍gcc编译系统gdb程序调试工具,1.Linux下的C/C+程序设计介绍,Linux是一个开放源代码的操作系统,其稳定性与低廉的价格使其在服务器、嵌入式领域以及桌面应用中逐渐占有越来越大的市场份额。

因此,对Linux环境下的程序开发人员的需求也就越来越大了。

C语言是Linux操作系统中的核心语言,掌握Linux环境下的C语言开发是至关重要的。

Linux下的C/C+程序设计介绍,Linux编程实现步骤:

$vihello.c按下I进入编辑状态输入以下内容#includemain()printf(“Itrytouselinux!

n”);,Linux下的C/C+程序设计介绍,Linux编程实现步骤:

按ESC进入命令状态输入:

“:

wq”保存文件并退出$gcc-ohello.outhello.c编译hello.c,将并将文件输出到hello.out$./hello.out你将会看到输出结果$Itrytouselinux!

2.gcc编译系统,GNUCompilerCollection,RichardStallman,since1987一套多语言,多平台的编译器/链接器软件集合Version4.0支持Ada(GCCforAdaakaGNAT),C,C+(GCCforC+akaG+),Fortran(GCCforFortranakaGFortran),Java(GCCforJavaakaGCJ),Objective-C主要支持平台:

Alpha,ARM,Blackfin,System/390,x86andAMD64,IA-64i.e.theItanium“,Motorola68000,MIPS,PowerPC,SPARCWindows下的GCC环境dev-c+,MinGW(MinimalistGNUonWindows),2.gcc编译系统(续),目前Linux平台上最常用的C语言编译系统是gcc(GNUCompilerCollection)常用文件名后缀及其表示的文件类型,2.gcc编译系统(续),gcc命令的工作过程,1预处理阶段预处理程序(Preprocessor)读取C语言源文件,对其中以“#”开头的指令(伪指令)和特殊符号进行处理。

伪指令主要包括文件包含、宏定义和条件编译指令。

2编译阶段编译程序(Compiler)对预处理之后的输出文件进行词法分析和语法分析,试图找出所有不符合语法规则的部分。

在确定各成分都符合语法规则后,将其“翻译”为功能等价的中间代码表示或者汇编代码。

3汇编过程汇编程序(Assembler)把汇编语言代码翻译成目标机器代码的过程。

4连接阶段将一个文件中引用的符号(如变量或函数调用)与该符号在另外一个文件中的定义连接起来,从而使有关的目标文件连成一个整体,最终成为可被操作系统执行的可执行文件。

连接模式分为静态连接和动态连接。

2.gcc编译系统(续),gcc指令的一般格式为:

gcc参数要编译的文件参数目标文件$gccf1.cf2.c(针对C语言源程序)执行完成后,生成默认的可执行文件a.out。

按照选项作用所对应的编译阶段,可将gcc的选项分为四组:

预处理选项、编译选项、优化选项和连接选项。

1预处理选项,2编译程序选项,2.gcc编译系统(续),3优化程序选项优化分为对中间代码的优化和针对目标码生成的优化。

4连接程序选项,2.gcc编译系统(续),应用举例,示例源程序hello.c#includeintmain(void)printf(hellogcc!

rn);return0;,生成预处理文件命令$gccEhello.cohello.i,预处理文件hello.i的部分内容.externvoidfunlockfile(FILE*_stream);#679/usr/include/stdio.h3#2hello.c2intmain(void)printf(hellogcc!

n);return0;,2.gcc编译系统(续),2.gcc编译系统(续),生成汇编文件$gccShello.cohello.s,汇编文件hello.s的部分内容.main:

pushl%ebpmovl%esp,%ebp.addl$16,%espmovl$0,%eaxleaveret.,2.gcc编译系统(续),生成目标文件命令:

$gccchello.cohello.o生成可执行文件命令:

$gcchello.cohello运行程序$./hellohellogcc!

2.gcc编译系统(续),gcc错误类型及对策C语法错误:

C语言的语法错误头文件错误:

找不到头文件head.h连接库错误:

找不到所需要的函数库未定义符号:

有未定义的符号,2.gcc编译系统(续),gcc调试总结主要为语法错误:

输入错误;类型匹配错误;分析信息:

主要来自gcc编译时产生的提示信息错误警告定位:

不一定在提示信息描述的地方;综合分析提示信息及提示行的上下文环境,定位并修正错误、警告。

有的警告可以不用修复;,Makefile的编写,对于大型程序,通常由成千上万个模块(子程序)组成,在编写过程中,人们希望对其中某个(些)模块的修改不要导致对整个程序的编译,这也是Makefile的一个主要功用之一。

Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。

makefile文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。

makefile文件是许多编译器-包括WindowsNT下的编译器-维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改makefile文件而已。

Makefile的编写,Makefile中一般包含如下内容:

需要由make工具创建的项目,通常是目标文件和可执行文件。

要创建的项目依赖哪些文件。

创建每个项目时需要运行的命令。

Makefile举例,Makefile内容factorial:

main.ofactorial.ogccofactorialmain.ofactorial.omain.o:

main.cgcccmain.cfactorial.o:

factorial.cgcccfactorial.c,Makefile简化写法factorial:

main.ofactorial.ogcco$main.o:

main.cgccc$factorial.o:

factorial.cgccc$,gcc、rm、cp等命令前是tab分割符,不能用空格,否则会出现:

“makefile:

2:

*遗漏分隔符。

停止。

”类似的错误,Makefile举例,function1.h,function2.h,main.c,function1.c,function2.c,function1.o,main.o,function2.o,main,头文件,源文件,目标文件,可执行文件,连接,编译,Makefile举例,Makefile内容main:

main.ofunction1.ofunction2.ogccomainmain.ofunction1.ofunction2.omain.o:

main.cfunction1.hfunction2.hgcccmain.cfunction1.o:

function1.cfunction1.hgcccfunction1.cfunction2.o:

function2.cfunction2.hgcccfunction2.cclean:

rmf*.o,Makefile举例,通过使用makefile的变量和隐含规则,可简化为如下形式:

objects=main.ofunction1.ofunction2.omain:

$(objects)gccomain$(objects)main.o:

function1.hfunction2.hfunction1.o:

function1.hfunction2.o:

function2.hclean:

rmf*.o跟我一起写Makefilehttp:

/,静态调试:

在程序编译阶段查错并修正错误;主要为语法错误:

输入错误;类型匹配错误;排错方式:

利用错误、警告信息,并结合源文件环境排错动态调试:

在程序运行阶段查错并修正错误;主要错误类型:

算法错误;输入错误;排错方式:

利用调试工具定位并修正错误;,3.gdb程序调试工具(续),3.gdb程序调试工具,程序中的错误按其性质可分为三种:

(1)编译错误,即语法错误。

主要是程序代码中有不符合所用编程语言语法规则的错误。

(2)运行错误。

如对负数开平方,除数为0,循环终止条件永远不能达到等。

(3)逻辑错误。

这类错误往往是编程前对求解的问题理解不正确或算法不正确引起的,它们很难查找。

查找程序中的错误,诊断其准确位置,并予以改正,这就是程序调试。

程序调试分为人工查错与机器调试。

gdb主要帮助用户在调试程序时完成四方面的工作:

(1)启动程序,可以按用户要求影响程序的运行行为。

(2)使运行程序在指定条件处停止。

(3)当程序停止时,检查它出现了什么问题。

(4)动态改变程序的执行环境,这样就可以纠正一个错误的影响,然后再纠正其他错误。

3.gdb程序调试工具,gdb概述Linux下的gdb调试器,是一款GNU组织开发并发布的UNIX/Linux下的程序调试工具。

它没有图形化的友好界面,但功能强大。

在进行应用程序的调试之前,要注意的是gdb进行调试的是可执行文件,而不是如“.c”这样的源代码文件。

因此,需要先通过gcc编译生成可执行文件才能用gdb进行调试。

3.gdb程序调试工具(续),完成如下的调试任务:

(1)设置断点。

(2)监视程序变量的值。

(3)程序的单步执行。

(4)修改变量的值。

3.gdb程序调试工具(续),为了发挥gdb的全部功能,需要在编译源程序时使用-g选项:

$gcc-gprog.c-oprog(针对C语言源程序prog.c)$gcc-gprogram.cpp-oprogram(针对C+源程序program.cpp)启动gdb的常用方法有:

(1)以一个可执行程序作为gdb的参数:

$gdbprgm

(2)同时以可执行程序和core文件作为gdb的参数:

$gdbprgmcore启动gdb后就显示其提示符:

(gdb),并等待用户输入相应的内部命令。

用户可以利用命令quit终止其执行,退出gdb环境。

3.gdb程序调试工具(续),启动gdb,3.gdb程序调试工具(续),3.gdb程序调试工具(续),控制程序的执行-设置断点编译源程序时需要使用-g选项在gdb中用break命令(其缩写形式为b)设置断点:

breaklinenum(在当前文件指定行linenum处设置断点,停在该行开头)breaklinenumifcondition(在当前文件指定行linenum处设置断点,但仅在条件表达式condition成立时才停止程序执行)breakfunction(在当前文件函数function的入口处设置断点)breakfile:

linenum(在源文件file的linenum行上设置断点)breakfile:

function(在源文件file的函数function的入口处设置断点)break*address(运行程序在指定的内存地址address处停止)break(不带任何参数,则表示在下一条指令处停止)断点应设置在可执行的行上,不应是变量定义之类的语句。

2.显示断点infobreakpointsnuminfobreaknum3删除断点deletebkptnums4运行程序runargs(run简写是r)5程序的单步跟踪和连续执行

(1)单步跟踪stepN参数N表示每步执行的语句行数。

进入被调用函数内部执行。

nextN参数N表示每步执行的语句行数。

被调用函数被当做一条指令执行。

stepi(缩写为si)或nexti(缩写为ni)命令一条一条地执行机器指令。

(2)连续执行利用continue,c或fg命令连续执行到下一个断点。

3.gdb程序调试工具(续),6函数调用callexpr其中,expr是所用编程语言的函数调用表达式,包括函数名和实参。

在调试过程中,可以使用return命令强行从正在执行的函数中退出:

returnexpr还可以使用finish命令退出函数,但它并不立即退出,而是继续运行,直至当前函数返回。

3.gdb程序调试工具(续),调试举例,源文件,假定如下greeting.h和greeting.c存放在functions目录下,静态调试举例,分块编译greeting.c$gcc-g-Wall-cfunctions/greeting.c-g:

将调试信息加入到编译的目标文件中;-Wall:

将编译过程中的所有级别的警告都打印出来;无错误my_app.c$gcc-g-Wall-cmy_app.c-Ifunctions参数含义同上-Idir添加头文件搜索目录错误信息:

静态调试举例,错误信息:

错误记录格式:

文件名:

行号:

错误描述,my_app.c:

Infunctionmain:

my_app.c:

6:

nundeclared(firstuseinthisfunction)my_app.c:

6:

(Eachundeclaredidentifierisreportedonlyoncemy_app.c:

6:

foreachfunctionitappearsin.)my_app.c:

9:

parseerrorbeforegreetingmy_app.c:

6:

warning:

unusedvariablename,静态调试举例,分析、定位错误(警告):

my_app.c的第6行:

描述含义:

n是一个没有声明的变量;分析:

声明数字name时用到了变量n,但变量n在之前没有声明;改正:

声明一个新变量n;或者将n改为宏N这里取第2种改正方法;,静态调试举例,my_app.c的第9行:

描述含义:

在“greeting”之前出现解析错误;分析:

c中每行程序以;结束,第9行greeting之前的程序行没有以;结束;改正:

第8行末尾增加“;”重新编译错误信息:

my_app.c:

Infunctionmain:

my_app.c:

11:

warning:

controlreachesendofnon-voidfunction,静态调试举例,分析、定位错误(警告):

警告:

my_app.c的11行描述含义:

控制以非空函数结束;分析:

main函数返回类型为int,源程序没有以return整数形式结束;改正:

将main改为返回void类型;或者:

在main程序后增加return返回语句;采用第2种解决方式;重新编译,无错误或警告信息,完成静态调试gcc-g-omy_appmy_app.cfunctions/greeting.c,静态调试举例,静态调试总结主要为语法错误:

输入错误;类型匹配错误;分析信息:

主要来自gcc编译时产生的提示信息错误警告定位:

不一定在提示信息描述的地方;综合分析提示信息及提示行的上下文环境,定位并修正错误、警告。

有的警告可以不用修复;,动态调试举例,常见的动态调试方法:

增加调试语句;记录程序的执行状况;观察内存变化;使用调试工具;GUNDebuger的功能:

启动程序,设置程序执行的上下文环境;在指定的条件下停止程序;程序停止时,检查程序的状态;在程序运行时,改变程序状态,使其按照改变后的状态继续执行。

动态调试举例,对静态调试中的例子继续进行动态调试工具:

gdb启动gdb,动态调试举例,调试指定程序(./my_app)问题:

期望的输出和实际输出不一致,动态调试举例,初次错误定位:

输出有错误错误定位重新开始一次调试;启动gdb;加载调试程序(./my_app);查看程序源代码命令:

list文件名,动态调试举例,(gdb)listmy_app.c:

1,201#include2#includegreeting.h3#defineN104intmain(void)56charnameN;7printf(YourName,Please:

);8scanf(%s,name);9greeting(name);10return0;11(gdb)break7BreakPoint1at0x8048384:

filemy_app.c,line7.,在程序第7行设置断点命令:

(gdb)break7,动态调试举例,错误详细定位,动态调试举例,错误详细定位,动态调试举例,分析:

11行说明name变量被正确赋值(tom)13行说明name变量值被正确赋予greeting的参数变量name16说明打印出现了错误,即错误出现在函数greeting中;综合分析错误出现在greeting.c的第5行;原因:

没有输出字符串的格式不对;改正错误,printf(Hello!

%srn,name);,动态调试举例,动态调试总结主要错误类型:

算法错误;输入错误;定位方法:

设置断点;单步步进执行;查看变量取值变化;反复执行,逐步缩小错误范围;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2