




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
gdb调试器的基本功能与常用命令,本讲大纲:,启动调试程序功能及其命令,使用断点功能及其命令,检查数据的功能及其命令,使用观察窗口功能及其命令,检查栈信息功能及其命令,检查源代码功能及其命令,改变程序的运行功能及其命令,启动调试程序功能及其命令,通过前一节介绍的简单的调试过程,已经了解了gdb调试工具的主要功能和几个简单的常用命令。gdb调试工具之所以可以成为Linux平台上应用最广泛的调试工具,是因为其具有强大的调试功能,接下来了解一下gdb调试工具的基本功能和相应的命令。以如下代码实例作为调试的一个程序,从应用中了解实现这些功能的命令是如何操作的。例6.2此例主要实现了输入年月日,判断这一天是一年中的第几天,该示例代码保存在year.c文件中,6.2.1启动调试程序功能及其命令使用gdb调试程序,必须要让gdb可以获得程序的信息,因此需要在编译程序的时候加入参数g,编译命令如:gccgo可执行文件名源程序文件名生成一个带有调试信息的可执行文件,由此,可以使用如下命令语句加载可执行文件程序进入到gdb调试工具中。gdb可执行文件名进入gdb调试工具的另一种方法是,可以先输入gdb命令(在命令行中输入gdb,回车),然后通过文件命令操作加载可执行文件。如file可执行文件名进入gdb调试工具后,可以使用gdb命令run运行程序,在命令行中输入run,回车就可以运行程序。当调试结束,可以输入命令quit,回车退出gdb调试工具,也可以使用ctrl+d快捷键退出gdb调试工具。上述启动程序命令采用了在gdb命令中加载可执行文件的方式进入gdb调试工具中,实现过程,使用断点功能及其命令,设置断点是为了在该点处中断程序的运行,方便观察程序状态,并且可以单步跟踪后续代码。(1)在gdb调试工具中使用break命令可以设置断点,如/运行到某行停止运行break行号/程序进入指定功能函数时停止运行break函数名称/符合if语句条件时,运行到指定位置停止运行break行号/函数名称if条件使用break命令在程序的第5行和第23行分别设置了断点,检查数据的功能及其命令,使用观察窗口功能及其命令,在使用观察窗口时,需要设置监视点,用于监视某个表达式或变量,当表达式或变量的值被读或被写时让程序断下。在gdb调试工具中,关于设置监测点有如下几种命令:watch命令:为表达式(或变量)设置了一个监测点,用于监视被写的内容,一旦表达式值(或变量值)有变化时,立即停住程序。rwatch命令:用于监视某个表达式(或变量)被读,当表达式值(或变量值)有变化时,就停住程序。awatch命令:用于当表达式(或变量)的值被读或被写时,停住程序。infowatchpoints命令:用于列出当前所设置了的所有监测点的相关信息。通过上述介绍,可以了解到使用watch命令观察一个变量或者表达式值,当值改变,不满足watch命令中写入的条件时,即值有变化时,会停住程序,方便程序员观察此时的程序动态。(此调试示例使用的是实例6.1中的程序test.c)调试的效果如图6.2所示。图6.2设置观察窗口的调试效果图上述调试过程实现了当i3时,会停住程序,然后,使用print命令,查看一下接下来的i值是多少,通过调试可以查到i值为4,接着输入continue命令,继续程序,得到程序的最终从小到大的排序结果,此时观测的写入信息已经不存在了。,检查栈信息功能及其命令,栈是一种有限定性的线性表,在内存中有特定的一段连续空间。当程序调用了一个函数时,函数的地址、函数参数、函数内的局部变量都被压入栈中,保存在栈中。栈上的内容只在函数的范围内存中,在函数运行结束,这些内容也会被销毁。可以通过gdb调试命令查看栈信息。所谓的栈层信息是指栈的层编号、当前的函数名、函数参数值、函数所在文件及行号,函数执行到的语句。在实现查看栈信息的功能时使用实例6.1中的test.c为例。在gdb调试工具中,可以查看栈信息的命令有如下几种:backtrace命令,简写形式为bt。用于打印当前的函数调用栈的所有信息。backtracen命令,简写形式为btn命令。其中n若为正整数,代表只打印栈顶上n层的栈信息;若n为负整数时,表示只打印栈底下n层的栈信息。framen命令,简写形式为fn命令。其中n为从0开始的整数,表示栈中的层编号。该命令用于显示第n层栈的信息,若没有n值,此命令可用于显示当前栈层的信息。upn命令实现的功能是向栈底方向移动n层,若没有n,则表示向栈底方向移动一层。由于在栈中,栈底位于内存的高地址区域,栈顶位于低地址区,因此用up命令名表示,反之使用down命令名,表示向栈顶方向移动n层。上述查看栈信息的命令应用效果如图6.19所示。图6.19查看栈信息infoframe命令,简写形式为infof命令。在查看栈信息时,可以通过此命令实现显示更为详细的栈层信息,如:调用函数与被调用函数的地址,当前函数使用的编程语言,函数参数地址及值,局部变量的地址等等。infoargs命令用于显示当前函数的参数名及值。infolocals命令用于显示当前函数局部变量及其值。infocatch命令用于显示出当前函数中的异常处理信息。如图6.20所示,演示了infof命令,infoargs命令,infolocals命令和infocatch命令的输出情况。,检查源代码功能及其命令,在使用gdb调试工具时,都需要在编译程序时加上-g参数,将源程序的信息编译到执行文件中,这样在调试的过程中,就可以使用gdb命令查看到源程序的相关内容。查看源代码的功能有如下几种:显示源代码、搜索源代码、查看源代码的所在路径以及查看源代码的内存等等。下面简单介绍一下查看源代码与源代码的内存信息的功能及其相应的命令。(演示程序使用例6.2的year.c程序)(1)显示源代码在显示源代码的功能中,可以实现查看某一行周围的源程序以及指定行号的代码内容等。list命令就是用于显示源代码,当在list命令后面加上不同的参数时,会有不同的含义,如:list不加任何参数表示显示当前行后面的代码。:显示当前行号后面的代码。:显示当前行号前面的代码。:显示程序第n行周围的代码。:显示函数名为function的功能函数代码。:显示从第first行到第last行之间的代码。:显示从当前行到last行之间的代码。:显示文件名为filename的文件的第n行的代码。:显示文件名为filename的文件中的函数名为function的函数的代码。在默认的情况下,list命令一次会显示10行,当查看代码时,有时会觉得一次显示10行没有必要,因此可以通过下面两个命令设置显示的行数。如:setlistsize:count为显示的行数,使用此命令可以设置每一次显示源代码的行数。showlistsize:此命令可以查看当前显示源代码的行数的设置。(2)查看源代码的内存在gdb调试程序时,难免会遇到需要查看某一行代码所在的内存地址等信息,因此在gdb的强大调试功能中提供了infoline命令查看程序在运行时,所指定的源代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025企业停车位租赁合同
- 2025网约车租赁合同范本
- 2025私营企业劳动合同书模板样本
- 委托代购合同范本与注意事项
- 建筑工程绿色施工设计案例分析
- 2025年个人自有车辆租赁合同
- 2025年山西省煤矿安全培训考试安全生产管理人员传人题库含答案
- 水陆联运货物运单(GF-91-0407)货运保险理赔合同协议
- 电子产品质量控制关键技术
- 仓库消防安全培训考试题目及答案
- 关于医院“十五五”发展规划(2026-2030)
- 雪花啤酒终端销售协议书
- 贵州省2025年高职院校分类考试招生中职生文化综合英语试题答案
- 配餐公司库房管理制度
- 2025年人保车险考试题及答案
- 酒店宴会部前台培训
- 统编版小升初语文《记叙文阅读》教案
- 2025年云南省职教高考电工技术类《电工基础理论知识》考试复习题库(含答案)
- 《餐饮点菜》课件
- 公司财务知到智慧树章节测试课后答案2024年秋北京第二外国语学院
- 工厂交叉作业安全管理协议书(2篇)
评论
0/150
提交评论