版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章 GNU gcc gdb邹昕光哈尔滨工业大学自动化测试与控制研究所2012课程内容ngccnarngdbGCCnGCC的组件名称功能描述cppC预处理器g+C+编译器gccC编译器gccbug创建bug报告的shell脚本gcov覆盖测试工具,分析如何最好的优化程序libgccgcc的运行库libstdc+标准C+库libsupc+提供支持C+语音的库函数gccn跨平台的编译器 GNU项目的C编译器n四个步骤 - 预处理 preprocessing - 编译 compilation - 汇编 assembly - 连接 linkinggccgccn预处理q处理诸如#define #inc
2、lude 之类的预处理指令qgcc通过调用cpp程序执行这项功能n编译q将输入文件转换成汇编语言文件n汇编q将汇编语言文件转换为目标文件qgcc通过调用gas执行这项功能n链接q将一个或多个目标文件组装成可执行文件qgcc通过调用ld执行这项功能gccn常用选项符号符号意义意义c只进行编译和汇编产生目标文件o outfile指定输出文件名g在编译产生的文件中附加调试信息Wall尽可能多的产生编译警告信息Werror将警告信息视为错误信息D定义变量L添加库搜索路径l指定搜索的库名E只进行预处理gcc示例n示例说明q随机数测试程序q包含代码文件文件文件用途用途main.c主文件randutil.h
3、随机函数头文件randutil.c随机函数实现文件displayutil.h显示函数头文件displayutil.c显示函数实现文件gcc示例n一次性构建qgcc main.c randutil.c displayutil.c -ocomputen特点q所有的代码都编译链接到可执行文件compute中;q任何一个代码文件被修改,所有代码文件都需要重新编译链接;q只适合tiny型项目,实际项目不使用这种方法。gcc示例n一步一步构建n特点q所有代码都编译链接进可执行文件compute中q某个代码文件被修改,其他代码文件无需重新编译q小型项目一般采用这种方式gcc -c randutil.cgcc
4、 -c displayutil.cgcc -c main.cgcc randutil.o display.o main.o -ocomputegcc示例n定义变量nmain.c的代码片段 1#include randapi.h 2#include 3#include 4#define ITERATIONS1000000L 5 6int main() 7 17for (i = 0; i main.in观察#include指令和#define指令的转换ar 管理程序库n归档文件(archive)的创建,修改和文件提取程序;narchive文件是一个包含一组其他文件的文件,以一定结构组织这些文件,使
5、得可以从archive文件中提取出单个文件;n原文件的内容,访问许可标志,时戳,属组等信息都保存在archive文件中,并能在文件提取时恢复;arn命令格式qar options archive memberqarchive 归档文件名qmember 加入归档文件的文件名 n命令行选项qr 将member文件插入archive中,如果使用v修饰r,即vr一起用,代表以替换的方式将member文件插入archive中。qt显示archive的内容列表arn例子 arDemon创建一个程序库,包含command.o, display.o和keyboard.oqar rv libutil.a com
6、mand.o display.o keyboard.on列出程序库libtuil.a的成员qar t libutil.agcc示例n例子libDemoq计算随机数平均值的软件,其中main.c是主程序;randutil.c包含随机数计算程序;display.c包含结果输出程序。q要求将randutil.c和display.c中的程序放在一个函数库libutil.a中。q主程序main.c使用该函数库最终编译链接成可执行程序compute。gcc示例n使用库文件n多个密切关联的目标文件可以组成一个库文件,项目结构更加清晰n库文件可供多个项目使用n适用于任何规模的项目gcc -c randutil
7、.cgcc -c displayutil.car -rv libutil.a randutil.o displayutil.ogcc main.c -L. -lutil -ocomputegdbnGNU的软件调试工具n功能q运行程序:一直执行,单步执行等q挂起程序q检查和修改变量q调用函数q检查调用堆栈call backtraceq检查内存内容q检查寄存器内容qgdbn需要对程序以-g模式进行编译gcc -g -c randutil.cgcc g -c displayutil.car -rv libutil.a randutil.o displayutil.ogcc -g main.c -L.
8、 -lutil -ocomputegdbn常用命令及缩写命令命令缩写缩写意义意义fileNA装入待调试的可执行文件killk终止正在调试的程序listl列出部分源代码nextn单步执行,不进入函数内部steps单步执行,进入函数内部runr执行当前调试的程序quitq退出gdbbreakb设置断点watchNA监视指定变量是否满足条件,如果满足条件程序挂起displayNA自动显示感兴趣的变量continuec继续执行gdb示例1n启动gdbqgdb (启动gdb后用file命令装载可执行文件)qgdb test (启动gdb并装载可执行文件)gdb示例2n显示部分源代码 list(gdb)
9、l3#define ITERATIONS1000000L45int main()67long i;8long isum;9float fsum;1011/* Initialize the random number API */12initRand();gdb示例2n显示指定行范围 list filename: line1,line2(gdb) l main.c: 10,201011/* Initialize the random number API */12initRand();1314/* Find the average of getRand(10) returns (0 . 9) *
10、/15isum = 0L;16for (i = 0; i ITERATIONS; i+)17isum += getRand(10);18 displayInt(getRand(10) average, (int)(isum / ITERATIONS);1920/* Find the average of getSRand() returns (0.0 . 1.0) */gdb示例2n显示指定函数名list filename: function_name(gdb) l initRand 2#include 3#include 4#include randutil.h56void initRand
11、()78time_t seed;9seed = time(NULL);10srand(seed);11gdb示例3n设置断点qbreakpoint routine_nameqbreakpoint line_number (gdb) b mainBreakpoint 1 at 0 x804847d: file main.c, line 12.(gdb) b 18Breakpoint 2 at 0 x80484b3: file main.c, line 18.(gdb) b initRand Breakpoint 3 at 0 x8048536: file randutil.c, line 9.g
12、db示例3n管理断点q列出当前所有断点信息 info breakpointsq删除断点 delete index(gdb) info breakpoints Num Type Disp Enb Address What1 breakpoint keep y 0 x0804847d in main at main.c:122 breakpoint keep y 0 x080484b3 in main at main.c:183 breakpoint keep y 0 x08048536 in initRand at randutil.c:9(gdb) delete 1(gdb) info bre
13、akpoints Num Type Disp Enb Address What2 breakpoint keep y 0 x080484b3 in main at main.c:183 breakpoint keep y 0 x08048536 in initRand at randutil.c:9gdb示例3n禁止某个断点 disable indexn使能某个断点 enable index(gdb) disable 2(gdb) info breakpoints Num Type Disp Enb Address What2 breakpoint keep n 0 x080484b3 in
14、main at main.c:183 breakpoint keep y 0 x08048536 in initRand at randutil.c:9(gdb) enable 2(gdb) info breakpoints Num Type Disp Enb Address What2 breakpoint keep y 0 x080484b3 in main at main.c:183 breakpoint keep y 0 x08048536 in initRand at randutil.c:9gdb示例4nwatchpoint断点qwatch isum 1000n需要程序运行到能看到
15、该变量的位置后才能执行,否则提示错误。(gdb) watch isumNo symbol isum in current context.gdb示例4(gdb) rStarting program: /home/simulation/GNUGccGdb/libDemo/computer Breakpoint 3, initRand () at randutil.c:99seed = time(NULL);(gdb) cContinuing.Breakpoint 2, main () at main.c:1818 displayInt(getRand(10) average, (int)(isu
16、m / ITERATIONS);gdb示例4(gdb) watch isum 100Hardware watchpoint 4: isum 100(gdb) disable 2(gdb) disable 3(gdb) info breakpoints Num Type Disp Enb Address What2 breakpoint keep n 0 x080484b3 in main at main.c:18breakpoint already hit 1 time3 breakpoint keep n 0 x08048536 in initRand at randutil.c:9brea
17、kpoint already hit 1 time4 hw watchpoint keep y isum 100gdb示例4(gdb) cContinuing.Hardware watchpoint 2: isum 100Old value = 0New value = 1main () at main.c:1616for (i = 0; i ITERATIONS; i+)(gdb) print i$1 = 23(gdb) print isum$2 = 106gdb示例6n单步执行 next stepqnext(gdb) n17isum += getRand(10);(gdb) 16for (
18、i = 0; i ITERATIONS; i+)(gdb) 17isum += getRand(10);gdb示例6n单步执行 next stepqstep(gdb) sgetRand (max=10) at randutil.c:2323randvalue = (int)(float)max * rand() / (RAND_MAX + 1.0);(gdb) s24return randvalue;gdb示例7n自动显示感兴趣的变量 display variable_name(gdb) nmain () at main.c:1616for (i = 0; i ITERATIONS; i+)(gdb) display isum1: isum = 108(gdb)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临终病人的护理
- 煮糖助晶工班组安全竞赛考核试卷含答案
- 钢琴调律师变更管理测试考核试卷含答案
- 石作文物修复师安全宣贯测试考核试卷含答案
- 糖艺师风险评估知识考核试卷含答案
- 26年随访服务宣教服务
- 医学26年:输液港维护要点解读 查房课件
- 26年肾癌NGS检测指导靶向用药
- 2026年Android开发笔试题及详细答案
- 河南省名校联盟2026届高三年级5月模拟考试-英语+答案
- 2026河南兴豫惠民职业技能培训学校有限公司市场化招聘15人笔试参考题库及答案解析
- (二模)苏北七市2026届高三第二次调研测试英语试卷(含答案及解析)
- DB31∕T 1624-2025 机器人智能化等级评价指南
- 2026年青年干部廉洁纪律要求应知应会知识库
- 北京市2024商务部中国国际电子商务中心招聘1人笔试历年参考题库典型考点附带答案详解
- 2026年国企采购管理专干考试题库及答案
- 小额贷款消费者权益保护制度
- 危险化学品储存安全技术
- DB44∕T 2633-2025 Ⅷ、Ⅸ级内河航道通航标准
- JJG(交通) 063-2005 汽车底盘测功机检定规程
- 临床试验中各方的责任
评论
0/150
提交评论