gcc与gdb使用教案课件.pptx
gcc与gdb使用,gcc与gdb使用,第1页/共28页,第1页/共28页,第2页/共28页,第2页/共28页,第3页/共28页,第3页/共28页,第4页/共28页,第4页/共28页,第5页/共28页,第5页/共28页,第6页/共28页,第6页/共28页,第7页/共28页,第7页/共28页,第8页/共28页,第8页/共28页,第9页/共28页,第9页/共28页,多个源文件生成一个可执行文件,问题:有多个源文件时,如何生成一个可执行文件?方法1:gcc Wall o mytest test1.c test2.c test3.c方法2:gcc-Wall -c test1.cgcc-Wall c test2.cgcc-Wall c test3.c gcc o mytest test1.o test2.o test3.o,第10页/共28页,多个源文件生成一个可执行文件 问题:有多个源文件时,如何生成,用gdb调试GCC程序,gdb是一个用来调试C和C+程序的常用调试工具之一。 gdb所提供的一些功能:监视程序中变量的值。设置断点以使程序在指定的代码行上停止执行。 逐行执行代码。分析崩溃程序的产生的core文件,第11页/共28页,用gdb调试GCC程序 gdb是一个用来调试C和C+程,gdb基本用法,需要调试的程序,在编译时要使用调试选项。在默认的情况下,调试符号不会编译到程序中。调试之后,不需要重新编译程序。gdb filename出现(gdb)在这里,可以输入调试命令,第12页/共28页,gdb基本用法 需要调试的程序,在编译时要使用调试选项。在,基本gdb命令,file装入想要调试的可执行文件。kill终止正在调试的程序。list执行一行源代码但不进入函数内部。next执行一行源代码但不进入函数内部。step执行一行源代码而且进入函数内部。run执行当前被调试的程序quit终止 gdbwatch使你能监视一个变量的值而不管它何时被改变。break在代码里设置断点, 这将使程序执行到这里时被挂起。make使你能不退出 gdb 就可以重新产生可执行文件。shell使你能不离开 gdb 就执行 UNIX shell 命令。,第13页/共28页,基本gdb命令file装入想要调试的可执行文件。第13页/共,List 显示程序内容,一般10行List 函数名:显示函数对应内容List 行号:显示该行周围的源代码Set listsize 行数:设置显示代码的行数Show listsize :显示当前listsize的设置List first,last:显示first和last之间的内容,第14页/共28页,List 显示程序内容,一般10行第14页/共28页,Ctrl+c 发信号量中断当前操作Info break:显示断点信息Delete n:去除第几号断点Disable n:暂停使用某个断点Enable n:启动某个暂停的断点Break:从后向前清除断点Continue:继续运行,第15页/共28页,Ctrl+c 发信号量中断当前操作第15页/共28页,调试实例,1.在 gdb 提示符下键入 list 命令三次, 列出源代码:(注:按回车健将重复上一个命令 )2.根据列出的源程序, 你能看到要设断点的地方在第22行, 在 gdb 命令行提示符下键入如下命令设置断点: (gdb) break 22 3.键入 run 命令, 继续执行,第16页/共28页,调试实例1.在 gdb 提示符下键入 list 命令三次,4.设置一个观察 string2size - i 变量的值的观察点来看出错误是怎样产生的, 做法是键入: (gdb) display string2size - i 5.根据情况使用print命令查看表达式的值,判断错误出现的位置,进行错误改正,第17页/共28页,4.设置一个观察 string2size - i 变量,程序自动维护工具make,问题:当开发的程序非常庞大,且关系复杂,手工编译链接非常困难解决: 利用一个自动系统控制和协调整个程序的创建过程。在这个自动系统中,程序员可以定义创建规则并通过这个规则进行项目的开发。 makefile就是定义这种规则的文件。GNU make 解释执行makefile。,第18页/共28页,程序自动维护工具make问题:当开发的程序非常庞大,且关系复,make是一种自动生成和维护目标程序的工具。可以调用编译器、连接器等根据程序各部分的修改情况,重新编译链接目标代码输入make命令后,系统自动检测系统文件和以定义的规则,完成整个创建过程,程序自动维护工具make,第19页/共28页,make是一种自动生成和维护目标程序的工具。程序自动维护工具,Vi makefileMain:main.o haha.o sin_value.o cos_value.o gcc o main.o haha.o sin_value.o cos_value.o lm使用make两次,发现成功实现可执行文件的产生,并且自动检查文件的更新情况,第20页/共28页,Vi makefile第20页/共28页,优点:简化编译时所需要执行的命令编译完成后,修改某个源码文件,则make仅会对被修改了的文件进行编译,其他的目标文件不会被更改最后可以依照相依性来更新执行文件,第21页/共28页,优点:第21页/共28页,目标(target):目标文件1 目标文件2 gcc -o 欲新建可执行文件 目标1 目标2注意:命令行必须以tab按键开头 如果两个以上的规则,可添加Clean:rm f main main.o haha.o sin_value.o cos_value.o,程序自动维护工具make,第22页/共28页,目标(target):目标文件1 目标文件2程序自动维护工具,Vi makefileLIBS=-lmOBJS=main.o haha.o sin_value.o cos_value.oMain:$OBJSgcc o main $OBJS $LIBSClean:rm f main $OBJS,第23页/共28页,Vi makefile第23页/共28页,变量左边不可以有,例如LIBS的左边习惯上变量最好大写运用变量时,以$变量或$(变量),第24页/共28页,变量左边不可以有,例如LIBS的左边第24页/共2,./configure:建立makefile文件,一般软件开发者写脚本检查你linux系统相关的软件属性,安装信息都是在该步骤完成Make:依据makefile当中的默认工作进行编译的行为,主要是gcc将源码文件编译成可以被执行的目标文件,但这些目标文件通常还需要一些函数库之类的链接后,才能生成一个完整的可执行文件,该文件会被放置在目前所在的目录中,尚未被安装到预定安装的目录中,第25页/共28页,./configure:建立makefile文件,一般软件开,Make install:最后步骤,依据makefile中关于install的选项,将上一个步骤编译完成的数据安装到默认的目录中,完成安装,第26页/共28页,Make install:最后步骤,依据makefile中关,make 命令的使用,make option macrodef targetmake命令默认的文件是makefile(Makefile),也可以用“-f 文件名”指定要解释执行的文件。make默认从文件指定的第一条规则开始执行,并根据第一条中的依赖文件顺次执行。也可以通过target直接指定执行的目标。,第27页/共28页,make 命令的使用 make option macr,