ImageVerifierCode 换一换
格式:PPT , 页数:37 ,大小:217.50KB ,
资源ID:4611648      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-4611648.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第六章+Linux+程序设计(gcc).ppt)为本站会员(czsj190)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第六章+Linux+程序设计(gcc).ppt

1、第6章 常用开发工具,主要内容,gcc简介 功能 命令 利用gcc编译c程序 利用make工具简化编译过程 make简介 Makefile基本格式 调试 静态调试 动态调试 gdb调试工具的使用,gcc简介,名称: GNU project C and C+ Compiler GNU Compiler Collection 管理与维护 GNU项目 对C/C+编译的控制 预处理(Preprocessing) 编译(Compilation) 汇编(Assembly) 链接(Linking,gcc的使用,基本使用格式 $ gcc 选项 常用选项及含义,gcc的常用选项,gcc的常用选项,gcc文件扩展

2、名规范,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“ 2int main(void) printf(“hello gcc!n“);return 0; ,生成汇编文件

3、,命令 $gcc S hello.c o hello.s,汇编文件hello.s的部分内容main:pushl %ebpmovl %esp, %ebpaddl $16, %espmovl $0, %eaxleaveret “,生成二进制文件,生成目标文件 命令: $gcc c hello.c o hello.o 生成可执行文件 命令: $gcc hello.c o hello 运行程序 $./hello hello gcc!,编译多个文件,文件清单,编译多个文件,目录结构(1) 编译命令$ gcc my_app.c greeting.c o my_app 目录结构(2) 编译方式(1)$ gc

4、c my_app.c functions/greeting.c o my_app -I function,编译多个文件,目录结构(2) 编译方式(2) 分步编译 命令: 1、$gcc -c my_app.c -Ifunctions 2、$gcc -c functions/greeting.c 3、$gcc my_app.o greeting.o o my_app 思路: 编译每一个.c文件,得到.o的目标文件; 将每一个.o的目标文件链接成一个可执行的文件;,使用make工具,适用场合:多个文件组成的软件项目 基本格式:目标:欲生成的目标文件 依赖项:生成目标需要的文件 原理: 判断依赖项是否

5、为最新,否则,生成新的目标 make工具的使用格式: make 命令选项 命令参数 通常使用make就可以了,make会寻找Makefile作为编译指导文件;,目标:依赖项列表 (Tab缩进)命令,使用make工具,Makefile示例,使用make工具,目标的依赖关系,使用make工具,更实用的Makefile,调试,静态调试: 在程序编译阶段查错并修正错误; 主要为语法错误: 输入错误; 类型匹配错误; 排错方式: 利用错误、警告信息,并结合源文件环境排错 动态调试: 在程序运行阶段差错并修正错误; 主要错误类型: 算法错误; 输入错误; 排错方式: 利用调试工具定位并修正错误;,调试举例

6、,源文件,静态调试举例,分块编译 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

7、: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种

8、改正方法;,静态调试举例,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 整数 形

9、式结束; 改正: 将main改为返回void类型; 或者: 在main程序后增加return 返回语句; 采用第2种解决方式; 重新编译,无错误或警告信息,完成静态调试,静态调试举例,静态调试总结 主要为语法错误: 输入错误; 类型匹配错误; 分析信息: 主要来自gcc编译时产生的提示信息 错误警告定位: 不一定在提示信息描述的地方; 综合分析提示信息及提示行的上下文环境,定位并修正错误、警告; 有的警告可以不用修复.,动态调试举例,常见的动态调试方法: 增加调试语句 ; 记录程序的执行状况 ; 观察内存变化 ; 使用调试工具; GNU Debuger的功能: 启动程序,设置程序执行的上下文环

10、境; 在指定的条件下停止程序; 程序停止时,检查程序的状态; 在程序运行时,改变程序状态,使其按照改变后的状态继续执行。,动态调试举例,动态调试举例,对静态调试中的例子继续进行动态调试 工具:gdb 启动gdb,动态调试举例,调试指定程序(./my_app) 问题:期望的输出和实际输出不一致,动态调试举例,初次错误定位: 输出有错误 错误定位 重新开始一次调试; 启动gdb; 加载调试程序(./my_app); 查看程序源代码 命令: list 文件名,动态调试举例,(gdb) list my_app.c:1,20 1 #include 2 #include “greeting.h“ 3 #d

11、efine N 10 4 int main(void) 5 6 char nameN; 7 printf(“Your Name,Please:“); 8 scanf(“%s“,name); 9 greeting(name); 10 return 0; 11 (gdb) break 7 BreakPoint 1 at 0x8048384: file my_app.c, line 7.,在程序第7行设置断点 命令: (gdb) break 7,动态调试举例,错误详细定位,动态调试举例,错误详细定位,动态调试举例,分析: 11行说明name变量被正确赋值(tom) 13行说明name变量值被正确赋予

12、greeting的参数变量name 16说明打印出现了错误,即错误出现在函数greeting中; 综合分析 错误出现在greeting.c的第5行; 原因: 输出字符串的格式不对; 改正错误,动态调试举例,动态调试总结 主要错误类型: 算法错误; 输入错误; 定位方法: 设置断点; 单步步进执行; 查看变量取值变化; 反复执行,逐步缩小错误范围;,课后习题,1、从文本源代码到可执行文件,gcc可以对哪些步骤进行控制? 2、编一个简单的helloworld程序,利用gcc控制程序生成的四个步骤。 3、简述gcc的用法和常用参数的含义。 4、上机查找gcc利用的库文件和头文件都放在什么路径下? 5、make工具如何使用?Makefile的基本格式是什么? 6、简述gdb的用法和常用命令的含义。,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报