linux教程第04课开发工具.ppt

上传人:wuy****n92 文档编号:70797448 上传时间:2023-01-28 格式:PPT 页数:35 大小:328.49KB
返回 下载 相关 举报
linux教程第04课开发工具.ppt_第1页
第1页 / 共35页
linux教程第04课开发工具.ppt_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《linux教程第04课开发工具.ppt》由会员分享,可在线阅读,更多相关《linux教程第04课开发工具.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、操作系统与操作系统与LinuxLinux实现实现第第第第6 6 6 6章章章章 常用开发工具常用开发工具常用开发工具常用开发工具 主要内容gcc编译系统的概念和使用 gdb程序调试工具的概念和使用程序维护工具make 的概念和使用 6.1 gcc编译系统编译系统6.1.1 文件名后缀文件名后缀文件名后缀 文 件 类 型 文件名后缀 文 件 类 型.cC源文件.F .fpp .FPPFORTRAN源文件.i预处理后的C源文件.s汇编程序文件.ii预处理后的C+源文件.S必须预处理的汇编程序文件.mObjective-C源文件.o目标文件.mi预处理后的Objective-C源文件.a静态链接库.

2、h头文件.so动态链接库.C .cc .cp.cpp .c+.cxxC+源文件 6.1.2 C语言编译过程语言编译过程 1预处理阶段 预处理是常规编译之前预先进行的工作,故此得名。它读取C语言源文件,对其中以“#”开头的指令(伪指令)和特殊符号进行处理。主要包括文件包含、宏定义和条件编译指令。2编译阶段编译程序(Compiler)对预处理之后的输出文件进行词法分析和语法分析,试图找出所有不符合语法规则的部分 3汇编过程汇编过程是汇编程序(Assembler)把汇编语言代码翻译成目标机器代码的过程 4连接阶段连接程序(Linker)要解决外部符号访问地址问题连接模式分为静态连接和动态连接 6.1

3、.3 gcc命令行选项命令行选项在Linux系统中,C/C+程序编译命令是gcc$gcc f1.c f2.c (针对C语言源程序)执行完成后,生成默认的可执行文件a.out。1预处理选项几个预处理常用选项:-C -D name -D name=definition -U name -I dir -o file -E 2编译程序选项 gcc编译程序常用选项及其作用 选 项 格 式 功 能-c 只生成目标文件,不进行连接。用于对源文件的分别编译-S 只进行编译,不做汇编,生成汇编代码文件格式,其名与源文件相同,但扩展名为.s-o file 将输出放在文件file中。如果未使用该选项,则可执行文件放

4、在a.out中-g 指示编译程序在目标代码中加入供调试程序gdb使用的附加信息-v 在标准出错输出上显示编译阶段所执行的命令,即编译驱动程序及预处理程序的版本号 3优化程序选项 优化程序常用的选项及其作用 选 项 格 式 功 能-O-O1 试图减少代码大小和执行时间,但并不执行需要花费大量编译时间的任何优化-O2 在-O1级别的优化之上,还进行一些额外调整工作除不做循环展开、函数内联和寄存器重新命名外,几乎进行所有可选优化-O3 除了完成所有-O2级别的优化之外,还进行包括循环展开和其他一些与处理器特性相关的优化工作-O0 不执行优化-Os 具有-O2级别的优化,同时并不特别增加代码大小 4连

5、接程序选项 连接程序常用的选项及其功能 选 项 格 式 功 能 object-file-name 不以专用后缀结尾的文件名就认为是目标文件名或库名。连接程序可以根据文件内容来区分目标文件和库-c -S -E 如果使用其中任何一个选项,那么都不运行连接程序,而且目标文件名不应该用做参数-llibrary 连接时搜索由library命名的库。连接程序按照在命令行上给定的顺序搜索和处理库及目标文件。实际的库名是liblibrary,但按默认规则,开头的lib和后缀(.a或.so)可以被省略-static 在支持动态连接的系统中,它强制使用静态链接库,而阻止连接动态库;而在其他系统中不起作用-Ldir

6、 把指定的目录dir加到连接程序搜索库文件的路径表中,即在搜索-l后面列举的库文件时,首先到dir下搜索,找不到再到标准位置下搜索-Bprefix 该选项规定在什么地方查找可执行文件、库文件、包含文件和编译程序本身数据文件-o file 指定连接程序最后生成的可执行文件名称为file,不是默认的a.out 6.2 gdb程序调试工具程序调试工具程序中的错误可按性质分为三种:(1)编译错误,即语法错误。(2)运行错误。(3)逻辑错误。查找程序中的错误,诊断其准确位置,并予以改正,这就是程序调试。程序调试分为人工查错与机器调试。6.2.1 启动启动gdb和查看内部命令和查看内部命令为了发挥gdb的

7、全部功能,需要在编译源程序时使用-g选项。如:$gcc -g prog.c -o prog (针对C语言源程序prog.c)启动gdb的方法有以下几种:(1)直接使用shell命令gdb (2)以一个可执行程序作为gdb的参数 (3)同时以可执行程序和core文件作为gdb的参数 (4)指定一个进程号PID作为gdb的第二个参数6.2.2 显示源程序和数据显示源程序和数据1显示和搜索源程序(1)显示源文件利用list命令可以显示源文件中指定的函数或代码行(2)模式搜索 forward-search regexp search regexp reverse-search regexp 2查看运行

8、时数据(1)print命令 一般使用格式是:print /fmt exp(2)gdb所支持的运算符 type adrexp 表示一个数据类型为type、存放地址为adrexp的数据。是一个与数组有关的双目运算符,使用形式如:print array10 print array35 file:var (或者 function:var)表示文件file(或者函数function)中变量var的值(3)输出格式在print /fmt exp命令中,“/”之后的fmt是表示输出格式的字母,它由表示格式的字母和表示数据长度的字母组成。(4)whatis命令显示出变量的数据类型(5)x命令可以查看内存地址中

9、数据的值。其使用格式是:x /fmt address(6)display命令可以预先设置一些要显示的表达式。其一般格式是:display /fmt exp(7)显示函数调用栈信息 显示函数调用栈信息的命令 格 式 功 能 backtrace n|-nbt n|-nwhere n|-n 打印当前的函数调用栈的所有信息。如果有参数n(正整数),则只打印栈顶上n层帧的信息;如果是-n的形式,则只打印栈底n层帧的信息 frame nf n其中,n是栈中帧的编号,从0(表示栈顶)开始递增。如果不带参数,则显示出当前栈帧的信息;如果给出参数n,则选定帧号为n的帧作为当前帧 up n 表示向上移动n层栈帧。

10、如果没有参数,则表示向上移动一层 down n 表示向下移动n层栈帧。如果没有参数,则表示向下移动一层 info frameinfo f 显示出当前栈帧的所有信息,如函数地址,调用函数的地址,被调用函数的地址,目前函数的程序语言、函数参数地址及值、局部变量的地址等。6.2.3 改变和显示目录或路径改变和显示目录或路径(1)directory命令一般格式是:directory dir 或者 dir dir(2)cd命令使用格式为:cd dir(3)path命令使用格式是:path dirs(4)pwd命令(5)show directories(6)show paths6.2.4 控制程序的执行控

11、制程序的执行断点(breakpoint),观察点(watchpoint),捕捉点(catchpoint)统称为停止点 1设置和显示断点(1)设置断点:用break命令(其缩写形式为b)设置断点:(2)显示断点info breakpoints numinfo break num2设置和显示观察点(1)设置观察点watch expr(2)显示观察点info breakpoints info watchpoints 3设置捕捉点命令catch的格式是:catch event4维护停止点delete clear disable enable 5运行程序run命令的格式:run args 6程序的单步跟

12、踪和连续执行(1)单步跟踪实行单步跟踪的命令是step和next,其格式是:step N next N(2)连续执行 continue,c或fg命令 7函数调用 call expr return expr6.2.5 其他常用命令其他常用命令1执行shell命令其格式是:shell command-string2修改变量值(gdb)print x=10(gdb)set variable x=103跳转执行jump linenumjump *addr 6.2.6 应用示例应用示例 示例程序源代码(1)使用带-g选项的gcc命令对该程序进行编译:$gcc -g dbme.c -o dbme程序运行时

13、出现错误段错误(2)用程序名dbme作为参数启动gdb。(3)在gdb环境下运行该程序。使用backtrace命令 使用list命令显示相关行的内容 利用print命令可以打印出任何合法表达式的值(4)设置断点另外设置一个断点,另外设置一个断点,i i值等于值等于9999。6.3 程序维护工具程序维护工具make6.3.1 make的工作机制的工作机制GNU的make的工作过程如下:依次读入各makefile文件;初始化文件中的变量;推导隐式规则,并分析所有规则;为所有的目标文件创建依赖关系链;根据依赖关系和时间数据,确定哪些目标文件要重新生成;执行相应的生成命令。1makefile文件mak

14、e被调用后会依次查找名为GNUmakefile,makefile和Makefile的描述文件 Makefile规则有以下通用形式:目标文件:相依文件命令1#注释命令n#注释依赖行从一行的开头开始书写各命令行单独占一行,每个命令行的第一个字符必须是制表符,而不能使用8个空格#号后的内容为注释 在依赖行上,目标文件和相依文件之间要用一个或两个冒号分开 一个示例:prog:x.o y.o z.o assmb.o gcc x.o y.o z.o assmb.o -L/home/mqc/lib-lm -o progx.o:x.c defs.h gcc -c x.cy.o:y.c defs.h gcc -

15、c y.cz.o:z.c gcc -c z.cassmb.o:assmb.s as -o assmb.o assmb.sclean:rm prog *.o6.3.2 使用变量使用变量1变量定义和引用make的变量(又称做宏定义)一般均由大写字母和数字组成。定义变量的一般格式是:=引用make变量的方式与引用shell变量类似,即:把变量用圆括号括起来,并在前面加上“$”符号。例如:$(OBJECT)$(LIBES)2自动变量除了用户定义的变量外,make也可以使用环境变量、自动变量和预定义变量。make中定义了一些它们的值会因环境的不同而发生改变的变量,被称为自动变量。例如:$表示规则中的目标

16、文件集合$?所有比目标文件还新的那些相依文件的集合,以空格分开$规则中的第一个相依文件名$规则中所有相依文件的集合,以空格分开$*如果目标文件的后缀是make所识别的,则$*就是去掉后缀的目标文件名3预定义变量归档库:AR ARFLAGS汇编命令:AS ASFLAGSC编译命令:CC CPP CFLAGS CPPFLAGSC+编译命令:CXX CXXFLAGS6.3.4 make命令常用选项命令常用选项make命令有丰富的命令行选项。例如:-C dir 把目录改到dir -d 输出所有的调试信息 -e 指明环境变量优先于makefile文件中的变量 -f file 使用file文件作为makefile文件 -I 忽略在执行重新生成文件的命令的过程中出现的所有错误 -I dir 或 Idir 指定一个包含makefile文件的搜索目录

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁