欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Linux操纵系统环境下的C程序开发技术.ppt

    • 资源ID:3694662       资源大小:1,002.52KB        全文页数:56页
    • 资源格式: PPT        下载积分:12金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Linux操纵系统环境下的C程序开发技术.ppt

    第五讲 Linux操作系统环境下的C程序开发技术,Linux系统及程序设计,韦 勇 信息安全教研室 ,主要内容,编译器GCC简介 编译器GCC使用 make工具使用 程序调试,教学要求,理解GCC概念; 掌握GCC使用方法; 学会编写makefile; 掌握GDB调试方法。,GCC简介,名称: GNU project C and C+ Compiler GNU Compiler Collection 管理与维护 GNU项目,GCC简介,GCC能工作在多种平台上 Intel x86(Linux, Windows) Alpha(Linux) PowerPC(AIX) Sparc(Solaris) GCC可以编译多种语言 C C+ Objective-C(标准C的派生) Fortran Java Ada,GCC简介,C语言编译过程 预处理阶段(Preprocess) “#”开头的指令(伪指令/宏指令) 和特殊符号进行处理。 编译阶段(Compile) 预处理之后的输出文件进行词法分析和语法分析 汇编过程(Assemble) 把汇编语言代码翻译成目标机器代码 连接阶段(Link) 解决外部符号访问地址问题(库函数),GCC的使用,gcc 选项 输入文件 输入文件包括源程序文件、编译中间文件等 如果没有指定选项,Linux下生成的可执行文件是a.out gcc的选项主要分为四组: 预处理选项 编译选项 优化选项 连接选项,GCC的常用选项,GCC的常用选项,GCC的常用选项,GCC文件扩展名规范,使用gcc编译代码,源代码,示例源程序hello.c #include int main(void) printf(hello gcc!rn); return 0; ,生成预处理文件,$gcc E hello.c o hello.i,预处理文件hello.i的部分内容 . extern void funlockfile (FILE *_stream) ; # 679 /usr/include/stdio.h 3 # 2 hello.c 2 int main(void) printf(hello gcc!n); return 0; ,生成汇编文件,$gcc S hello.c o hello.s,汇编文件hello.s的部分内容 . main: pushl%ebp movl%esp, %ebp . addl$16, %esp movl$0, %eax leave ret .,生成二进制文件,生成目标文件 命令: $gcc c hello.c o hello.o 生成可执行文件 命令: $gcc hello.c o hello 运行程序 $./hellohello gcc!,编译多个文件,编译多个文件,目录结构(1) 编译命令 $ gcc my_app.c greeting.c o my_app 目录结构(2) 编译方式(1) $gcc my_app.c functions/greeting.c o my_app -I functions,编译多个文件,目录结构(2) 编译方式(2) 分步编译 命令: 1、$gcc -c my_app.c -I functions 2、$gcc -c functions/greeting.c 3、$gcc my_app.o greeting.o o my_app 思路: 编译每一个.c文件,得到.o的目标文件; 将每一个.o的目标文件链接成一个可执行的文件;,使用make工具,适用场合: 多个文件组成的软件项目 基本格式: 目标:欲生成的目标文件 依赖项:生成目标需要的文件 原理: 判断依赖项是否为最新,否则,生成新的目标,目标:依赖项列表 (Tab缩进)命令,使用make工具,make工具的使用格式: make 命令选项 命令参数 通常使用make就可以了,make会寻找Makefile作为编译指导文件;,使用make工具,Makefile示例,使用make工具,目标的依赖关系,使用make工具,target:$OBJ gcc -o target clean: rm install: remove: ,Makefile实例,调试,静态调试 在程序编译阶段查错并修正错误; 主要为语法错误: 输入错误; 类型匹配错误; 排错方式: 利用错误、警告信息,并结合源文件环境排错,静态调试举例,动态调试: 在程序运行阶段差错并修正错误; 主要错误类型: 算法错误; 输入错误; 排错方式: 利用调试工具定位并修正错误;,静态调试举例,静态调试举例,分块编译 greeting.c $gcc -g -Wall -c functions/greeting.c -g:将调试信息加入到编译的目标文件中 ; -Wall:将编译过程中的所有级别的警告都打印出来 ; 无错误 my_app.c $gcc -g -Wall -c my_app.c -Ifunctions 参数含义同上 错误信息:,静态调试举例,错误信息: 错误记录格式: 文件名:行号:错误描述,my_app.c: In function main: my_app.c:6: n undeclared (first use in this function) my_app.c:6: (Each undeclared identifier is reported only once my_app.c:6: for each function it appears in.) my_app.c:9: parse error before greeting my_app.c:6: warning: unused variable name,静态调试举例,分析、定位错误(警告): my_app.c的第6行: 描述含义: n是一个没有声明的变量; 分析: 声明数字name时用到了变量n,但变量n在之前没有声明; 改正: 声明一个新变量n; 或者 将n改为宏N 这里取第2种改正方法;,静态调试举例,my_app.c的第9行: 描述含义: 在“greeting”之前出现解析错误; 分析: c中每行程序以;结束,第9行greeting之前的程序行没有以;结束; 改正: 第8行末尾增加“;” 重新编译 错误信息:,my_app.c: In function main: my_app.c:11: warning: control reaches end of non-void function,静态调试举例,分析、定位错误(警告): 警告:my_app.c的11行 描述含义:控制以非空函数结束; 分析:main函数返回类型为int,源程序没有以return 整数形式结束; 改正: 将main改为返回void类型; 或者: 在main程序后增加return 返回语句; 采用第2种解决方式; 重新编译,无错误或警告信息,完成静态调试,静态调试举例,静态调试总结 主要为语法错误: 输入错误; 类型匹配错误; 分析信息: 主要来自gcc编译时产生的提示信息 错误警告定位: 不一定在提示信息描述的地方; 综合分析提示信息及提示行的上下文环境,定位并修正错误、警告。 有的警告可以不用修复。,动态调试,常见的动态调试方法: 增加调试语句 ; 记录程序的执行状况 ; 观察内存变化 ; 使用调试工具; GNU Debuger的功能: 启动程序,设置程序执行的上下文环境; 在指定的条件下停止程序; 程序停止时,检查程序的状态; 在程序运行时,改变程序状态,使其按照改变后的状态继续执行。,GDB的使用,基本命令 显示源程序 查看运行时数据 改变和显示目录或路径 控制程序的执行 其他命令 获得帮助 启动gdb后使用help命令,GDB的使用,GDB的使用,显示源程序 List list 显示当前行后面的程序 list - 显示当前行前面的程序 list file: linenum 显示linenum行周围的程序 list startline , endline list file:function 显示函数名为function的程序 show listsize 显示listsize设置 set listsize num 设置listsize设置 源代码搜索 forward-search,search,reverse-search,GDB的使用,查看运行时数据 print p (p为变量名) print function(1,0) print *p whatis p,GDB的使用,改变和显示目录和路径 directory cd path pwd show directories show path,GDB的使用,控制程序的执行 设置/显示断点 break, info break 维护断点 delete breakpoint ; delete breakpoint 1; enable/disable breakpoint 1; clear linenum; 运行程序 run 单步调试和连续执行 step, next, continue 函数调用 call, return,GDB的使用,其他命令 执行shell命令 其格式是: shell command-string 修改变量值 print x=10 set variable x=10 跳转执行 jump linenum jump *addr,动态调试举例,对静态调试中的例子继续进行动态调试 工具:gdb 启动gdb,动态调试举例,调试指定程序(./my_app) 问题:期望的输出和实际输出不一致,动态调试举例,初次错误定位: 输出有错误 错误定位 重新开始一次调试; 启动gdb; 加载调试程序(./my_app); 查看程序源代码 命令: list 文件名,动态调试举例,(gdb) list my_app.c:1,20 1#include 2#include greeting.h 3#define N 10 4int main(void) 5 6char nameN; 7printf(Your Name,Please:); 8scanf(%s,name); 9greeting(name); 10return 0; 11 (gdb) break 7 BreakPoint 1 at 0 x8048384: file my_app.c, line 7.,在程序第7行设置断点 命令: (gdb) break 7,动态调试举例,错误详细定位,动态调试举例,动态调试举例,分析: 11行说明name变量被正确赋值(tom) 13行说明name变量值被正确赋予greeting的参数变量name 16说明打印出现了错误,即错误出现在函数greeting中; 综合分析 错误出现在greeting.c的第5行; 原因: 没有输出字符串的格式不对; 改正错误,动态调试举例,动态调试总结 主要错误类型: 算法错误; 输入错误; 定位方法: 设置断点; 单步步进执行; 查看变量取值变化; 反复执行,逐步缩小错误范围;,动态调试举例,#include #include #define BIGNUM 1000 void index_m(int ary, float fary); int main() int intary100; float fltary100; index_m(intary, fltary); exit(EXIT_SUCCESS); ,void index_m(int ary, float fary) int i; float f=3.14; for(i=0; i<BIGNUM; +i) aryi=i; faryi=i*f; ,动态调试举例,使用gcc -g选项编译dbme.c 调试dbme 运行dbme 列出源代码 打印变量 单步调试 设置断点,动态调试举例,调试一个二进制代码的本地溢出程序overflow.c #include #include char largebuff = “1234512345123451=ABCD”; int main (void) char smallbuff16; strcpy (smallbuff, largebuff); ,动态调试举例,调试overflow 运行overflow 单步调试 列出汇编代码 列出内存状况,小结,GCC使用方法 makefile编写方法 GDB使用方法,作业,练习makefile编写 练习gdb调试,谢谢!,

    注意事项

    本文(Linux操纵系统环境下的C程序开发技术.ppt)为本站会员(小**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开