收藏 分享(赏)

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

上传人:czsj190 文档编号:4611648 上传时间:2019-01-04 格式:PPT 页数:37 大小:217.50KB
下载 相关 举报
第六章+Linux+程序设计(gcc).ppt_第1页
第1页 / 共37页
第六章+Linux+程序设计(gcc).ppt_第2页
第2页 / 共37页
第六章+Linux+程序设计(gcc).ppt_第3页
第3页 / 共37页
第六章+Linux+程序设计(gcc).ppt_第4页
第4页 / 共37页
第六章+Linux+程序设计(gcc).ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

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的用法和常用命令的含义。,

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

当前位置:首页 > 网络科技 > linux/Unix相关

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


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

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

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