




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,linux下的 c程序编程,2,主要内容,gcc编译器,gdb调试器,3,一、gcc编译器 1、gcc是什么,gcc(gnu c complier)是符合ansi c标准的多平台编译器。gcc通过后缀来区别输入文件的类型,集成c、c+、java等多种语言编译器。 c c语言源代码文件。 h 程序所包含的头文件。 o 编译后的目标文件。 i 已经预处理过的c源代码文件。 s 汇编语言源代码文件。 s 经过预编译的汇编语言源代码文件。 c、cpp、.cc或.cxx c+源代码文件。 ii 己经预处理过的c+源代码文件。 a 由目标文件构成的档案库文件。,通过文件后缀来判断文件类型,通过权限来判断文件是否可以运行,4,2、gcc工作流程,5,起步演示helloworld hello.c #include int main(void) printf (“hello world!n”); return 0; 编译运行这段程序: gcc hello.c o hello ./hello 输出:hello world!,6,3、基本使用,基本用法: gcc options filenames options:编译器所需要的编译选项 filename:要编译的文件名 gcc有超过100个的编译选项。选项的合理使用对编译调试程序有很大作用。只介绍其中最基本、最常用的参数 -o output_filename:确定可执行文件的名称为output_filename.如果不给出这个选项,gcc就给出预设的可执行文件a.out,7,-c 进行预处理、编译,产生目标代码,不连接成为可执行文件。编译器只是由输入的.c等源代码文件生成.o为后缀的的文件(一般应用程序开发用不到,内核开发中可以用到),-g 产生符号调试工具(gnu的gdb)所必要的符号信息,要想对源代码进行调试,必须加入这个选项。,-o 告诉gcc进行基本优化,整个源代码会在编译、连接过程中进行优化处理 -o2 产生尽可能小、快的代码,比-o跟好的优化编译、连接,8,#include int main(void) double counter; double result; double temp; for(counter=0;counter2000.0*2000.0*2000.0/20.0+2020;counter+=(5-1)/4) temp=counter/1979; result=counter; printf(“result is %lfn”,result); return 0; ,9,gcc optimize.c o optimize time ./optimize gcc o optimize.c o optimize time ./optimize 对比两次执行的输出结果不难看出,程序的性能的确的到了很大幅度的改善,10,-w 关闭所有警告,建议不要使用此项 -wall 允许发出gcc能提供的所有有用的警告,也可以用-w(warning)来标记指定的警告,11,12,多个文件的编译,vi main.c #include void chessboard(); void stair(); main() chessboard(); stair(); ,vi chessboard.c #include void chessboard() int i,j; for (i=0;i8;i+) for(j=0;j8;j+) if(i+j)%2=0) printf(“%c%c“,0xa1,0xf6); else printf(“ “); printf(“n“); printf(“n“); ,vi stair.c #include void stair() int i,j; for(i=1;i11;i+) for(j=1;j=i;j+) printf(“%c%c“,0xa1,0xf6); printf(“n“); printf(“n“); ,gcc main.c chessboard.c stair.c o prngrap,13,常见错误,语法错误: 错误信息:文件source.c中第 n 行有语法错误(syntex error)。 头文件错误 错误信息:找不到头文件head.h ( can not find include file head.h)。 函数库错误 错误信息:链接程序找不到所需的函数库。如:ld:-lm:no such file or directory,14,二、gdb调试器,1、gdb介绍 gdb调试器主要用于调试可执行文件,这个文件必须提供调试版本,包含调试信息。 所以,编译程序时一定用调试选项使生成的可执行文件内包含调试信息,常用-g。 调试信息包含程序里每个变量的类型和在可执行文件里的地址映射及行号。 主要功能: 监视程序中变量的值 设置断点 逐行执行代码,15,起步调试test.c,void main() int i; long result = 0; for(i=1; i=100; i+) result += i; printf(“result = %dn“, result ); ,16,gdb快速进阶 1、编译生成可执行文件 gcc g test.c o test 2、启动gdb gdb test 3、在main函数处设置断点 break main 4、运行 run 5、单步运行 next 6、继续运行 continue,17,2、启动gdb 1)gdb 调试程序名 举例:gdb helloworld 2)gdb file 调试程序名,18,3、gdb基本命令,list (l) 查看程序 break(b) 函数名 在函数入口处设置断点 break(b) 行号 在指定行添加断点 break(b) 文件名: 行号 在制定文件名的制定行添加断点,19,20,2、使用举例:调试一个计算150和1100累加值的程序。,21,#include int sum(int n); main() int i,result=0; for(i=1;i=50;i+) result+=i; printf(“result1-50=%dn“,result); printf(“result1-100=%dn“,sum(100); int sum(int n) int i ,sum; for(i=1;i=n;i+) sum+=i; return sum; ,22,编译:gcc tst.c o tst 运行:./tst gcc编译时无报错,表明编译通过。但运行tst时,第一行结果result1-50=1275是正确的,第二行结果result1-100=14160814与预想不符,23,(3)调试 输入命令:gcc -g tst.c -o tst 启动调试:gdb tst 在gdb下进行调试过程用到许多基本gdb命令,一般都只写首字母即可。 键入“l”(list)查看gdb载入文件tstsm的源代码。按回车则重复上一次操作。,24,在第18行设置断点,键入”info b”查看设置断点的情况;输入命令“d 断点号”删除(delete)断点,gdb中键入“r”(run),程序从首行运行到断点前一句,在断点处暂停。,25,在gdb中键入“p(print) 变量名”命令查看断点处的相关变量值,在gdb中输入命令“n”(next),采用单步运行方式继续往下执行程序,在gdb中输入命令“c”(continue)把剩余还未执行的程序执行完 键入“q”(quit),退出gdb调试,返回终端的系统提示符。,本例子错误在sum函数中未对sum变量初始化。,26,关于watch 变量 注意,watch设置的观察点当值有改变时才会有输出。 有时对断点的变量设置了观察点,但是c(continue),n(ext)使用的不适当会看不到变量值的变化效果。 某个求字符串反序的程序中的一段代码 for(i=0;isize;i+) str2size-i=str1i; (a) str2size+1=0; (b) gdb调试时,在a处设置断点,run后停在a处,设置对变量的观察点watch str2size-i。然后按n一步步执行,看不到值的变化,按c才能看到效果。,27,4、gdb的help命令,直接输入help,可查看到gdb命令种类 查看某个类中的各种命令。如上步中列出的种类data 查看某个命令,(gdb) help list of classes of commands: aliases - aliases of other commands breakpoints - making program stop at certain points data - examining data files - specifying and examining files internals - maintenance commands type “help“ followed by a class name for a list of commands in that class. type “help“ followed by command name for full documentation. command name abbreviations are allowed if unambiguous.,(gdb) help data examining data. list of commands: call - call a function in the program delete display - cancel some expressions to be displayed when program stops delete mem - delete memory region disable display - disable some expressions to be displayed when program stops type “help“ followed by command name for full documentation. command name abbreviations are allowed if unambiguous.,查找call命令:help call。 (gdb) help call call a function in the program. the argument is the function name and arguments, in the notation of the current working language. the result is printed and saved in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓储物流中心租赁押金合同与货物配送服务协议
- 婚姻关系解除后赡养责任起始时间协议书
- 离婚财产分割协议中车辆贷款权益确认及归属协议
- 工业用地租赁合同续签及土地使用条件调整协议
- 离婚后子女抚养权变更与财产分割执行协议书
- 软件开发居间合同签订策略六大要素保障利益
- 2025年凉山中考历史真题及答案
- 2025-2030动力总成电动化转型节奏与传统车企战略调整分析报告
- 2025-2030功能性饮料消费行为与品牌差异化战略研究报告
- 2025-2030功能性运动内衣市场需求细分与产品创新研究报告
- 《商务英语视听说(3)》教学大纲
- 洱海保护课件
- 2024呼和浩特粮油收储有限公司招聘19名工作人员笔试备考试题及答案解析
- 乡村医生法律法规培训
- (北师大版2024)七年级数学上学期期中测试卷
- 义务教育法主题班会课件
- 全国计算机等级考试一级历年考试真题试题库(含答案)
- 《系统工程与决策分析》全册配套课件
- 数据驱动的教育决策
- 租房转让协议书
- 译林版七年级上学期英语第一次月考试卷(含答案解析)
评论
0/150
提交评论