第2章 Linux编程环境.ppt

上传人:qwe****56 文档编号:80596788 上传时间:2023-03-23 格式:PPT 页数:37 大小:177KB
返回 下载 相关 举报
第2章 Linux编程环境.ppt_第1页
第1页 / 共37页
第2章 Linux编程环境.ppt_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《第2章 Linux编程环境.ppt》由会员分享,可在线阅读,更多相关《第2章 Linux编程环境.ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第2 2章章 LinuxLinux编程环境编程环境在第在第1章中对章中对Linux的发展历史和特点进行了简单的介的发展历史和特点进行了简单的介绍,要在绍,要在Linux环境下进行程序设计,还需要对环境下进行程序设计,还需要对Linux的环的环境有所了解。本章对境有所了解。本章对Linux的编程环境进行介绍,通过本章的编程环境进行介绍,通过本章的学习,读者将能在的学习,读者将能在Linux环境下编写、编译和调试自己的环境下编写、编译和调试自己的程序。在程序。在Linux环境下进行开发工作,除了需要有一个可运环境下进行开发工作,除了需要有一个可运行的行的Linux环境,还需要具有如下的基本知识:

2、环境,还需要具有如下的基本知识:Linux命令命令行的环境和登录方式;行的环境和登录方式;Bash Shell的使用。的使用。2.1 Linux2.1 Linux环境下的编辑器环境下的编辑器在在Linux环境下有很多编译器,例如基于行的编辑器环境下有很多编译器,例如基于行的编辑器ed和和ex,基于文本的编辑器,基于文本的编辑器vim、ecmacs等。使用文本编辑等。使用文本编辑器可以帮助用户翻页、移动光标、查找字符、替换字符、删器可以帮助用户翻页、移动光标、查找字符、替换字符、删除等操作。本节中对除等操作。本节中对vim编辑器进行详细的介绍,并简单介编辑器进行详细的介绍,并简单介绍其他的编辑器

3、。绍其他的编辑器。2.1.1 vim2.1.1 vim使用简介使用简介vi是是UNIX系统下最通用的文本编辑器,系统下最通用的文本编辑器,vi是是visual editor的简写,发音为的简写,发音为viai。vi不是一个所见即所得的不是一个所见即所得的编辑器,如果要进行复制和格式化文本需要手动输入命令进编辑器,如果要进行复制和格式化文本需要手动输入命令进行操作。安装好行操作。安装好Linux操作系统后,一般已经默认安装完毕操作系统后,一般已经默认安装完毕了了vi编辑器。为了使用方便,建议安装编辑器。为了使用方便,建议安装vi的扩展版本的扩展版本vim,它是比它是比vi更强大,更加适合初学者使

4、用。更强大,更加适合初学者使用。1vim的安装的安装2vim编辑器的模式编辑器的模式2.1.2 2.1.2 使用使用vimvim建立文件建立文件vim的命令行格式为的命令行格式为“vim 文件名文件名”,“文件名文件名”是所是所要编辑的文件名。例如要编辑一个要编辑的文件名。例如要编辑一个“hello.c”的的C文件,按文件,按照如下步骤进行操作:照如下步骤进行操作:1建立文件建立文件2进入插入模式进入插入模式3文本输入文本输入4退出退出vim2.1.3 2.1.3 使用使用vimvim编辑文本编辑文本vim的编辑命令有很多,本小节选取经常使用的几个命的编辑命令有很多,本小节选取经常使用的几个命

5、令进行介绍。介绍如何在令进行介绍。介绍如何在vim下移动光标,进行删除字符、下移动光标,进行删除字符、复制、查找、转跳等操作。复制、查找、转跳等操作。1移动光标移动光标hjkl2删除字符删除字符x、dd、u、CTRL+R3复制粘帖复制粘帖py4查找字符串查找字符串“/”5跳到某一行跳到某一行g2.1.4 vim2.1.4 vim的格式设置的格式设置vim下可以进行很多方式的格式设置,这里仅对经常使下可以进行很多方式的格式设置,这里仅对经常使用的进行介绍,例如设置缩进,设置用的进行介绍,例如设置缩进,设置键对应空格的长键对应空格的长度,设置行号等。度,设置行号等。1设置缩进设置缩进2设置设置Ta

6、b键的空格数量键的空格数量3设置行号设置行号2.1.5 vim2.1.5 vim配置文件配置文件.vimrcvimrcvim启动的时候会根据启动的时候会根据/.vimrc文件配置文件配置vi的设置,可的设置,可以修改文件以修改文件.vimrc来定制来定制vim。例如可以使用。例如可以使用shiftwidth设设置缩进宽度、使用置缩进宽度、使用tabstop设置设置键的宽度、使用键的宽度、使用number设置行号的等格式来定义设置行号的等格式来定义vim的使用环境。例如按的使用环境。例如按照如下的情况对照如下的情况对.vimrc文件进行修改:文件进行修改:set shiftwidth=2#设置缩

7、进为设置缩进为2个空格个空格set tabstop=2#设置设置键宽度为键宽度为2个空格个空格set number#显示行号显示行号再次启动再次启动vim对缩进宽度,对缩进宽度,Tab键的宽度都进行了设定,键的宽度都进行了设定,并且自动显示行号。并且自动显示行号。2.1.6 2.1.6 使用其他编辑器使用其他编辑器在在Linux下还有一些其他的编辑器,例如下还有一些其他的编辑器,例如Gvim等等(Gvim是是vim的的gnome版本)、版本)、codeblocks(严格来说是(严格来说是一个一个IDE开发环境)。开发环境)。在在Linux进行开发并不排斥使用进行开发并不排斥使用Windows环

8、境下的编环境下的编辑器,例如写字板、辑器,例如写字板、UltraEdit、VC的的IDE开发环境等,在保开发环境等,在保存的时候要注意保存为存的时候要注意保存为UNIX格式,这主要是换行符造成的。格式,这主要是换行符造成的。在在Windows下的换行为下的换行为“回车回车+换行换行”,而,而UNIX环境下的环境下的换行为单个的回车,在换行为单个的回车,在Linux下用下用vim查看会发现每行的末查看会发现每行的末尾有一个很奇怪的尾有一个很奇怪的“”。如果没有保存为。如果没有保存为UNIX格式,在格式,在Linux下可以用下可以用dos2UNIX转换。例如,文件转换。例如,文件hello.c使用

9、使用windows编辑器,默认保存,将其转换为编辑器,默认保存,将其转换为UNIX格式:格式:Debian#dos2UNIX hello.c再次查看文件再次查看文件hello.c,“”符号已经消失了。符号已经消失了。2.2 Linux2.2 Linux下的下的GCCGCC编译器工具集编译器工具集在在2.1节中,介绍了如何使用节中,介绍了如何使用Linux环境下的编辑器编环境下的编辑器编写程序,并编写了一个写程序,并编写了一个hello.c的程序。要使编写的程序能够的程序。要使编写的程序能够运行,需要进行程序的编译。本节中将介绍运行,需要进行程序的编译。本节中将介绍Linux环境下采环境下采用的

10、编译器用的编译器GCC的选项和使用方式。的选项和使用方式。2.2.1 GCC2.2.1 GCC简介简介GCC是是Linux下的编译工具集,是下的编译工具集,是GNU Compiler Collection的缩写,包含的缩写,包含gcc、g+等编译器。这个工具集等编译器。这个工具集不仅包含编译器,还包含其他工具集,例如不仅包含编译器,还包含其他工具集,例如ar、nm等。等。GCC工具集不仅能编译工具集不仅能编译C/C+语言,其他例如语言,其他例如Object-C、Pascal、Fortran、Java、Ada等均能进行编译。等均能进行编译。GCC在可以根据不同的硬件平台进行编译,即能进行交叉编译

11、,在可以根据不同的硬件平台进行编译,即能进行交叉编译,在在A平台上编译平台上编译B平台的程序,支持常见的平台的程序,支持常见的X86、ARM、PowerPC、mips等,及等,及Linux、Windows等软件凭他。在等软件凭他。在本书中仅介绍对本书中仅介绍对C语言进行编译,其他语言的编译请读者查语言进行编译,其他语言的编译请读者查阅相关资料。阅相关资料。2.2.2 2.2.2 编译程序的基本知识编译程序的基本知识GCC编译器对程序的编译如图,分为四个阶段:预处编译器对程序的编译如图,分为四个阶段:预处理、编译和优化、汇编、连接。理、编译和优化、汇编、连接。2.2.3 2.2.3 单个文件编译

12、成执行文件单个文件编译成执行文件在在Linux下使用下使用GCC编译器编译单个文件十分简单,直编译器编译单个文件十分简单,直接使用接使用gcc命令后面加上要编译的命令后面加上要编译的C语言的源文件,语言的源文件,GCC会自会自动生成文件名为动生成文件名为a.out的可执行文件。自动编译的过程包括头的可执行文件。自动编译的过程包括头文件扩展、目标文件编译、以及链接默认的系统库生成可执文件扩展、目标文件编译、以及链接默认的系统库生成可执行文件,最后生成系统默认的可执行程序行文件,最后生成系统默认的可执行程序a.out。下面是一个程序的源代码,代码的作用是在控制台输出下面是一个程序的源代码,代码的作

13、用是在控制台输出“Hello World!”字符串。字符串。/*hello.c*/#include int main(void)printf(“Hello World!n”);return 0;2.2.4 2.2.4 编译生成目标文件编译生成目标文件目标文件是指经过编译器的编译生成的目标文件是指经过编译器的编译生成的CPU可识别的可识别的二进制代码,因为其中的一些函数过程没有相关的指示和说二进制代码,因为其中的一些函数过程没有相关的指示和说明,目标文件不能执行。明,目标文件不能执行。在在2.2.3小节中介绍了直接生成可执行文件的编译方法,小节中介绍了直接生成可执行文件的编译方法,在这种编译方法

14、中,中间文件作为临时文件存在,在可执行在这种编译方法中,中间文件作为临时文件存在,在可执行文件生成后,会删除中间文件。在很多情况下需要生成中间文件生成后,会删除中间文件。在很多情况下需要生成中间的目标文件,用于不同的编译目标。的目标文件,用于不同的编译目标。GCC的的-c选项用于生成目标文件,这一选项将源文件选项用于生成目标文件,这一选项将源文件编译生成目标文件,而不是生成可执行文件。默认情况下生编译生成目标文件,而不是生成可执行文件。默认情况下生成的目标文件的文件名和源文件的名称一样,只是扩展名为成的目标文件的文件名和源文件的名称一样,只是扩展名为.o。例如,下面的命令会生成一个名字为。例如

15、,下面的命令会生成一个名字为hello.o的目标文件:的目标文件:Debain#gcc c hello.c2.2.5 2.2.5 多文件编译多文件编译GCC可以自动编译链接多个文件,不管是目标文件还可以自动编译链接多个文件,不管是目标文件还是源文件,都可以使用同一个命令编译到一个可执行文件中。是源文件,都可以使用同一个命令编译到一个可执行文件中。例如一个项目包含两个文件,文件例如一个项目包含两个文件,文件string.c中有一个函数中有一个函数StrLen用于计算字符串的长度,而在用于计算字符串的长度,而在main.c中调用这个函中调用这个函数,将计算的结果显示出来。数,将计算的结果显示出来。

16、1源文件源文件string.c2源文件源文件main.c3编译运行编译运行2.2.6 2.2.6 预处理预处理在在C语言程序中,通常需要包含头文件并会定义一些宏。语言程序中,通常需要包含头文件并会定义一些宏。预处理过程将源文件中的头文件包含进源文件中,并且将文预处理过程将源文件中的头文件包含进源文件中,并且将文件中定义的宏进行扩展。件中定义的宏进行扩展。编译程序时选项编译程序时选项-E告诉编译器进行预编译操作。例如告诉编译器进行预编译操作。例如如下命令将文件如下命令将文件string.c的预处理结果显示在计算机屏幕上:的预处理结果显示在计算机屏幕上:Debain#gcc E string.c如

17、果需要指定源文件预编译后生成的中间结果文件名,如果需要指定源文件预编译后生成的中间结果文件名,需要使用选项需要使用选项-o。2.2.7 2.2.7 编译成汇编语言编译成汇编语言编译过程将用户可识别的语言翻译成一组处理器可识别编译过程将用户可识别的语言翻译成一组处理器可识别的操作码,通常翻译成汇编语言。汇编语言通常和机器操作的操作码,通常翻译成汇编语言。汇编语言通常和机器操作码之间是一种一对一的关系。码之间是一种一对一的关系。生成汇编语言的生成汇编语言的GCC选项是选项是-S,默认情况下生成的文,默认情况下生成的文件名和源文件一致,扩展名为件名和源文件一致,扩展名为.s。例如,下面的命令将。例如

18、,下面的命令将C语语言源文件言源文件string.c编译成汇编语言,文件名为编译成汇编语言,文件名为string.s:Debain#gcc S string.c2.2.8 2.2.8 生成和使用静态链接库生成和使用静态链接库静态库是静态库是obj文件的一个集合,通常静态库以文件的一个集合,通常静态库以“.a”为后为后缀。静态库用程序缀。静态库用程序ar生成,现在静态库已经不像之前那么普遍生成,现在静态库已经不像之前那么普遍了,这主要是由于程序都在使用动态库。了,这主要是由于程序都在使用动态库。静态库的优点是可以在不用重新编译程序库代码的情况静态库的优点是可以在不用重新编译程序库代码的情况下,进

19、行程序的重新连接,这种方法节省编译过程的时间(在下,进行程序的重新连接,这种方法节省编译过程的时间(在编译大型程序的时候,需要话费很长的时间)。但是由于现在编译大型程序的时候,需要话费很长的时间)。但是由于现在系统的强大,编译的时间已经不是问题。静态库的另一个优势系统的强大,编译的时间已经不是问题。静态库的另一个优势是开发者可以提供库文件给使用的人员,不用开放源代码,这是开发者可以提供库文件给使用的人员,不用开放源代码,这是库函数提供者经常采用的手段。当然这也是程序模块化开发是库函数提供者经常采用的手段。当然这也是程序模块化开发的一种手段,使每个软件开发人员的精力集中在自己的部分。的一种手段,

20、使每个软件开发人员的精力集中在自己的部分。在理论上,静态库的执行速度比共享库和动态库要快(在理论上,静态库的执行速度比共享库和动态库要快(1-5%)。)。1生成静态链接库生成静态链接库2使用静态链接库使用静态链接库2.2.9 2.2.9 生成动态链接库生成动态链接库动态链接库的名称有别名(动态链接库的名称有别名(soname)、真名)、真名(realname)和链接名()和链接名(linker name)。别名由一个前缀)。别名由一个前缀“lib”,然后是库的名字,再加上一个后缀,然后是库的名字,再加上一个后缀“.so”构成。真构成。真名是动态链接库的真实名称,一般总是在别名的基础上加上一名是

21、动态链接库的真实名称,一般总是在别名的基础上加上一个小版本号、发布版本等构成。除此之外,还有一个链接名,个小版本号、发布版本等构成。除此之外,还有一个链接名,即程序连接时使用的库的名字。在动态链接库安装的时候,总即程序连接时使用的库的名字。在动态链接库安装的时候,总是复制库文件到某个目录下,然后用一个软连接生成别名,在是复制库文件到某个目录下,然后用一个软连接生成别名,在库文件进行更新的时候,仅仅更氯砹库文件进行更新的时候,仅仅更氯砹蛹纯伞蛹纯伞1生成动态链接库生成动态链接库2动态连接库的配置动态连接库的配置3动态链接库管理命令动态链接库管理命令 4使用动态链接库使用动态链接库2.2.10 2

22、.2.10 动态加载库动态加载库动态加载库和一般的动态链接库所不同的是,一般动态动态加载库和一般的动态链接库所不同的是,一般动态链接库在程序启动的时候就要寻找动态库,找到库函数;而链接库在程序启动的时候就要寻找动态库,找到库函数;而动态加载库可以用程序的方法来控制什么时候加载。动态加动态加载库可以用程序的方法来控制什么时候加载。动态加载库主要有函数载库主要有函数dlopen()、dlerror()、dlsym()和和dlclose()来控制动态库的使用。来控制动态库的使用。1打开动态库打开动态库dlopen()2获得函数指针获得函数指针dlsym()3使用动态加载库的一个例子使用动态加载库的一

23、个例子2.2.11 GCC2.2.11 GCC常用选项常用选项除了之前介绍的基本功能外除了之前介绍的基本功能外GCC的选项配置是编译时的选项配置是编译时很重要的选择,例如头文件路径、加载库路径、警告信息及很重要的选择,例如头文件路径、加载库路径、警告信息及条是等。下面对常用的选项进行介绍:条是等。下面对常用的选项进行介绍:1-DMACRO选项选项2GCC的常用选项及含义的常用选项及含义2.2.12 2.2.12 编译环境的搭建编译环境的搭建目前最新目前最新debian发布版本(发布版本(lenny)GCC编译器的版本编译器的版本为为gcc-4.3。在安装。在安装debian的时候,如果没有特殊

24、指定,默的时候,如果没有特殊指定,默认情况下认情况下GCC是不会安装的。读者可以适用是不会安装的。读者可以适用which命令来查命令来查看系统中是否已经安装了看系统中是否已经安装了GCC:Debian#which gcc如果不存在,使用如果不存在,使用apt进行升级,获得进行升级,获得gcc包并且安装:包并且安装:Debain#apt-get install gcc如果读者对如果读者对C+感兴趣可以安装感兴趣可以安装g+。在编译器安装完。在编译器安装完毕后,可以使用毕后,可以使用GCC进行程序的编译了。进行程序的编译了。2.3 2.3 MakefileMakefile文件简介文件简介使用使用G

25、CC的命令行进行程序编译在单个文件下是比较的命令行进行程序编译在单个文件下是比较方便的,当工程中的文件逐渐增多,甚至变得十分庞大的时方便的,当工程中的文件逐渐增多,甚至变得十分庞大的时候,使用候,使用GCC命令编译就会变得渐渐变得力不从心。命令编译就会变得渐渐变得力不从心。Linux中的中的make工具提供了一种管理工程的功能,可以方便的进工具提供了一种管理工程的功能,可以方便的进行程序的编译,对更新的文件进行重新编译。行程序的编译,对更新的文件进行重新编译。2.3.1 一个多文件的工程例子一个多文件的工程例子 工程中共有工程中共有5个文件,在个文件,在add目录中有目录中有add_int.c

26、和和add_float.c两个文件分别计算整形和浮点型的相加;在两个文件分别计算整形和浮点型的相加;在sub目录下有文件目录下有文件sub_int.c和和sub_float.c,分别计算整形和浮,分别计算整形和浮点型的相减;顶层目录有文件点型的相减;顶层目录有文件main.c负责整个程序。负责整个程序。工程中的代码分别存放在工程中的代码分别存放在add/add_int.c、add/add_float.c、add/add.h、sub/sub_int.c、sub/sub_float.c、sub/sub.h和和main.c中。中。1文件文件main.c2加操作加操作3减操作减操作2.3.1 一个多文

27、件的工程例子一个多文件的工程例子2.3.2 2.3.2 多文件工程的编译多文件工程的编译将将2.3.1小节中的多文件工程编译成可执行文件有两种小节中的多文件工程编译成可执行文件有两种方法,一种是命令行操作,手动输入将源文件编译为可执行方法,一种是命令行操作,手动输入将源文件编译为可执行文件;另一种是编写文件;另一种是编写Makefile文件,通过文件,通过make命令将多个命令将多个文件编译为可执行文件。文件编译为可执行文件。1命令行编译程序命令行编译程序2多文件的多文件的Makefile3多文件的编译多文件的编译2.3.3 2.3.3 MakefileMakefile的规则的规则Makefi

28、le的框架是由规则构成的。的框架是由规则构成的。make命令执行时先在命令执行时先在Makefile文件中查找各种规则,对各种规则进行解析后,运文件中查找各种规则,对各种规则进行解析后,运行规则。规则的基本格式为:行规则。规则的基本格式为:TARGET.:DEPENDEDS.COMMANDTARGET:DEPENDEDS:COMMAND:1规则的书写规则的书写2目标目标3依赖项依赖项4规则的嵌套规则的嵌套5文件的时间戳文件的时间戳6执行的规则执行的规则7模式匹配模式匹配2.3.4 2.3.4 MakefileMakefile中使用变量中使用变量在在2.3.2小节的小节的Makefile中,生成

29、中,生成cacu的规则如下:的规则如下:cacu:add_int.o add_float.o sub_int.o sub_float.o main.ogcc-o cacu add/add_int.o add/add_float.o sub/sub_int.o sub/sub_float.o main.o生成生成cacu的时候,多次使用同一组的时候,多次使用同一组.o目标文件:在目标文件:在cacu规则的依赖项中出现一次,在生成规则的依赖项中出现一次,在生成cacu执行文件的时执行文件的时候又出现的一次。直接使用文件名进行书写的方法不仅书写候又出现的一次。直接使用文件名进行书写的方法不仅书写起来

30、麻烦,而且进行增加或者删除文件容易遗忘。例如增加起来麻烦,而且进行增加或者删除文件容易遗忘。例如增加一个一个mul.c文件,需要修改依赖项和命令行两个部分。文件,需要修改依赖项和命令行两个部分。1Makefile中的用户自定义变量中的用户自定义变量2Makefile中的预定义变量中的预定义变量3Makefile中的自动变量中的自动变量2.3.5 2.3.5 搜索路径搜索路径在大的系统中,通常存在很多目录,手动的添加目录的在大的系统中,通常存在很多目录,手动的添加目录的方法不仅十分笨拙而且容易造成错误。方法不仅十分笨拙而且容易造成错误。Make的目录搜索功的目录搜索功能提供的一个解决此问题的方法

31、,指定需要搜索的目录,能提供的一个解决此问题的方法,指定需要搜索的目录,make会自动找到指定文件的目录并添加到到文件上,会自动找到指定文件的目录并添加到到文件上,VPATH变量可以实现此目的。变量可以实现此目的。VPATH变量的使用方法如下:变量的使用方法如下:VPATH=path1:path2:2.3.6 2.3.6 自动推导规则自动推导规则使用命令使用命令make编译扩展名为编译扩展名为.c的的C语言文件的时候,语言文件的时候,源文件的编译规则不用明确的给出。这是因为源文件的编译规则不用明确的给出。这是因为make进行编进行编译的时候会使用一个默认的编译规则,按照默认规则完成对译的时候会

32、使用一个默认的编译规则,按照默认规则完成对.c文件的编译,生成对应的文件的编译,生成对应的.o文件。它执行命令文件。它执行命令“cc-c”来来编译编译.c源文件。在源文件。在Makefile中只需要给出需要重建的目标文中只需要给出需要重建的目标文件名(一个件名(一个.o文件),文件),make会自动为这个会自动为这个.o文件寻找合适文件寻找合适的依赖文件(对应的的依赖文件(对应的.c文件),并且使用默认的命令来构建文件),并且使用默认的命令来构建这个目标文件。这个目标文件。2.3.7 2.3.7 递归递归makemake当有多人在多个目录下进行开发程序,并且每个人负责当有多人在多个目录下进行开

33、发程序,并且每个人负责一个模块,而文件在相对独立的目录中,这时由同一个一个模块,而文件在相对独立的目录中,这时由同一个Makefile维护代码的编译就会十分蹩脚,因为对自己目录下维护代码的编译就会十分蹩脚,因为对自己目录下文件的增减都要修改此文件的增减都要修改此Makefile,这通常会造成项目的维护,这通常会造成项目的维护问题。问题。1递归调用的方式递归调用的方式2总控总控Makefile3子目录子目录Makefile的编写的编写2.3.8 2.3.8 MakefileMakefile中的函数中的函数在比较大的工程中,经常需要一些匹配操作或者自动生在比较大的工程中,经常需要一些匹配操作或者自

34、动生成规则的功能,本小节将介绍这方面的一点知识,对最常用成规则的功能,本小节将介绍这方面的一点知识,对最常用的使用方式进行介绍。的使用方式进行介绍。1获取匹配模式的文件名获取匹配模式的文件名wildcard2模式替换函数模式替换函数patsubst3循环函数循环函数foreach2.4 2.4 用用GDBGDB调试程序调试程序以上几个小节主要对以上几个小节主要对Linux下的编程环境进行介绍。要下的编程环境进行介绍。要使程序能够正常运行,跟踪代码、调试使程序能够正常运行,跟踪代码、调试bug是不可缺少的。是不可缺少的。Linux中包含一个很强大的调试工具中包含一个很强大的调试工具GDB(GNU

35、 Debuger),可以用它来调试可以用它来调试C和和C+程序。程序。GDB提供了以下功能:提供了以下功能:在程序中设置断点,当程序运行到断点处暂停在程序中设置断点,当程序运行到断点处暂停显示变量的值,可以打印或者监视某个变量,将变量的显示变量的值,可以打印或者监视某个变量,将变量的值显示出来值显示出来单步执行,单步执行,GDB允许用户单步执行程序,可以跟踪进入允许用户单步执行程序,可以跟踪进入函数和从函数中退出函数和从函数中退出运行时修改变量的值,运行时修改变量的值,GDB允许在调试状态下修改变量允许在调试状态下修改变量的值,此功能在测试程序的时候是十分有用的。的值,此功能在测试程序的时候是

36、十分有用的。路径跟踪,路径跟踪,GDB可以将代码的路径打印出来,方面用户可以将代码的路径打印出来,方面用户跟踪代码。跟踪代码。2.4.1 2.4.1 编译可调试程序编译可调试程序GDB是一套字符界面的程序集,可以使用命令是一套字符界面的程序集,可以使用命令gdb加加载要调试的程序。载要调试的程序。2.4.2 2.4.2 使用使用GDBGDB调试程序调试程序在在2.4.1小节中,将源文件小节中,将源文件ex02-gdb-01.c编译成目标文编译成目标文件件test。在编译的时候加入了。在编译的时候加入了“-g”选项,可以使用选项,可以使用GDB对对可执行文件可执行文件test进行调试。下面利用进

37、行调试。下面利用GDB调试调试test,查找原,查找原因因test计算错误的原因。计算错误的原因。1加载程序加载程序2设置输入参数设置输入参数3打印代码内容打印代码内容4设置断点设置断点5运行程序运行程序6显示变量显示变量7修改变量的值修改变量的值8退出退出GDB2.4.3 GDB2.4.3 GDB常用命令常用命令在在2.4.3小节中举了一个简单的例子来演示小节中举了一个简单的例子来演示DBG的使用,的使用,本节将详细的介绍本节将详细的介绍GDB的常用命令。主要包含信息获取、断的常用命令。主要包含信息获取、断点设置、运行控制、程序加载等常用命令,这些函数可以进行点设置、运行控制、程序加载等常用

38、命令,这些函数可以进行调试时的程序控制、程序的参数设置等。调试时的程序控制、程序的参数设置等。1执行程序执行程序2参数设置和显示参数设置和显示3列文件清单列文件清单4打印数据打印数据5断点断点6变量类型检测变量类型检测7单步调试单步调试8设置监测点设置监测点9调用路径调用路径10信息信息info11多线程多线程thread12汇编汇编disassemble13GDB的帮助信息的帮助信息2.4.4 2.4.4 其他的其他的GDBGDB除了基于命令行的除了基于命令行的GDB调试程序,在调试程序,在Linux下还有很多下还有很多其他基于其他基于GDB的程序,例如的程序,例如xxgdb、Insight

39、等。等。1xxgdb2Insight3ecmacs2.5 2.5 小结小结本章介绍了在本章介绍了在Linux环境下进行编程的基本知识,包括环境下进行编程的基本知识,包括vi编辑器、编辑器、GCC编译器、编译器、Makefile的编写、使用的编写、使用GDB进行程进行程序调试。序调试。vi编辑器是编辑器是Linux环境下进行开发最常用的编辑器,它环境下进行开发最常用的编辑器,它的功能强大,本章介绍了的功能强大,本章介绍了vim的使用方法。的使用方法。GCC编译器是进行编程时所必须了解的工具,本章中编译器是进行编程时所必须了解的工具,本章中仅仅对仅仅对GCC的冰山一角进行了揭示,介绍了使用的冰山一角进行了揭示,介绍了使用GCC进行进行程序编译的简单方法。程序编译的简单方法。GDB是是Linux下进行程序调试的不二下进行程序调试的不二首选,并且现在有了很多图形的客户端,使用起来更加方便。首选,并且现在有了很多图形的客户端,使用起来更加方便。有一些开发环境集成了有一些开发环境集成了GDB的调试环境。的调试环境。Makefile是进行程序编译时经常使用的编译配置文件,是进行程序编译时经常使用的编译配置文件,本章对本章对Makefile进行了介绍。进行了介绍。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁