




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在GCC中,-g选项可以生成的可执行程序中加入调试信息。调试信息保存在目标文件中,它描述的内容包括变量的数据类型,函数的原型声明,程序符号表,行号,与指令之间的对应关系,等等。-g完整形式是-glevel,其中,level中指定了调试信息中包括了调试信息的多少,默认的是2,1最少,level=3最多。gdb调试基本知识a.调试器指示的是将要执行的代码行b.只有在编译时拥有调试符号(-g)的程序才能在调试时看到源码c.同一行上有多个断点时,gdb仅中断在断点号最小的那个断点上d.断点可以设置在同一程序的不同文件中e.在任何给定时间,gdb只有一个焦点,即当前“活动”的文件f.源文件改变后,断点发生移动,带式断点属性的行号不变二、GDB基本命令清单查询在gdb提示符处键入help,将列出命令的分类,主要的分类有:*aliases:命令别名*breakpoints:断点定义;*data:数据查看;*files:指定并查看文件;*internals:维护命令;*running:程序执行;*stack:调用栈查看;*statu:状态查看;*tracepoints:跟踪程序执行。键入help后跟命令的分类名(如helpaliases),可获得该类命令的详细清单。三、GDB基本命令用法1、运行退出run(简写r):执行程序(gdb)runappargv1argv2.run命令后可跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、)在内。如果使用不带参数的run命令,gdb就再次使用前一条run命令的参数。setargs:设定传递给程序的参数(gdb)setargsargv1argv2.showargs:查看其缺省参数的列表(gdb)showargskill(简写k):异常终止在gdb控制下运行的程序(gdb)killquit(简写q):退出gdb(gdb)quit2、查看信息list(简写l):查看源码(gdb)listline_num或lline_num,line_num为行号。pirnt(简写p):printvar:查看变量var的值。(gdb)printvar可以通过添加参数来设置输出格式:/x按十六进制格式显示变量/d按十进制格式显示变量/u按十六进制格式显示无符号整型/o按八进制格式显示变量/t按二进制格式显示变量/a按十六进制格式显示变量/c按字符格式显示变量/f按浮点数格式显示变量例如:print/xvarprint可以显示被调试的语言中任何有效的表达式。表达式除了包含程序中的变量外,还可以包含以下内容:a).对程序中函数的调用(gdb)printfind_entry(1,0)b).数据结构和其他复杂对象(gdb)print*table_start$8=e=reference=000,location=0x0,next=0x0c).值的历史成分(gdb)print$1($1为历史记录变量,在以后可以直接引用$1的值)d).人为数组人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中在变量h后面的10个整数,一个动态数组的语法如下所示:baselength因此,要想显示在h后面的10个元素,可以使用h10:(gdb)printh10$13=(-1,345,23,-234,0,0,0,98,345,10)e).给变量赋值print除了显示一个变量的值外,还可以用来赋值,如:(gdb)printvar=1info(简写i):infobreak:显示断点信息,下面断点部分详述。(gdb)infobreakinfolocal:显示当前函数中的局部变量信息。(gdb)infolocalinfovar:系那是所有的全局和静态变量名称。(gdb)infovarinfofunc:显示所有的函数名称。(gdb)infofuncinfoprog:显示被调试程序的执行状态。(gdb)infoproginfofiles:显示被调试文件的详细信息。(gdb)infofileswhatis:显示变量的类型如程序中定义structtimevalvar;(gdb)whatisvartype=structtimevalinfor registers:查看寄存器信息ptype:比whatis的功能更强,它可以提供一个结构的定义(gdb)ptypevartype=structtimeval_time_ttv_sec;_suseconds_ttv_usec;3、暂停执行break(简写b):在调试的程序中设置断点该命令有如下四种形式:(gdb)breakline_number:使程序在执行给定行之前停止。(gdb)breakfunction_name:使程序在进入指定的函数之前停止。(gdb)breakline-or-functionifcondition:如果condition(条件)是真,程序到达指定行或函数时停止。(gdb)breakroutine-name:在指定例程的入口处设置断点多源文件中设置断点:(gdb)breakfilename:line-number(gdb)breakfilename:function-namebreakif:条件断点,满足特定条件后才会中断(gdb)breakline-or-functionif(condition)例如:(gdb)break46iftestsize=100breakthread:线程中断(gdb)breakline_numberthreadthread_numberif.line_number:断点设置所在代码行号thread_number:线程的ID。由GDB分配,通过infothreads查看运行中程序的线程信息。if.:设置中断条件。condition(简写cond):与breakif类似,只是condition只能用在已存在的断点上(gdb)condition(condition)例如:(gdb)cond3i=3将在断点3上附加条件(i=3)tbreak(简写tb):临时断点,中断一次后自动删除断点,形式参照break断点的管理1.显示当前gdb的断点信息info(简写i):(gdb)infobreak或ib它会以如下的形式显示所有的断点信息:NumTypeDispEnbAddressWhat1breakpointkeepy0x000028bcininit_randomatqsort2.c:1552breakpointkeepy0x0000291cininit_organatqsort2.c:168Num:断点号Type:断点类型(断点、监视点、捕获点)Disp:断点部署(该断点下次中断后该如何处理该断点)keep:保持不变del:删除该断点dis:禁用该断点Enb:断点当前启用状态What:断点位置2.删除断点:(gdb)deletebreakpoint1删除编号为1的断点,如果不带编号参数,将删除所有的断点(gdb)deletebreakpoint3.禁止使用某个断点(gdb)disablebreakpoint1禁止断点1,断点信息的(Enb)域将变为n4.允许使用某个断点(gdb)enablebreakpoint1允许断点1,断点信息的(Enb)域将变为y(gdb)enableoncebreakpoint1断点1中断一次后自动禁用5.删除刚才停止处的断点(gdb)clear6.清除某一代码行上的所有断点(gdb)clearfilename:line_number7.清除某一函数的断点(gdb)clearfilename:function_name8.移动断点gdb中移动断点的唯一方法是删除断点后在新的位置再放置一个一模一样的断点,但ddd中只需要拖曳断点符号就可以移动新的断点,并且保留该断点的所有属性。为断点设置命令列表通常,设置一个断点并且在上面中断后,一般会查询一些变量或做一些其他动作。使用命令列表(commands)就能使程序到达断点后自动执行这些动作。步骤如下:1.建立断点2.使用commands命令,用法(gdb)commandbreak_list,如:(gdb)commands1Typecommandsforwhenbreakpoint1ishit,oneperline.Endwithalinesayingjustend.silentprintfn=%dn,ncontinueend监视点watch:监视变量的变化达到条件时停止程序执行(gdb)watchi99注意:监视点的设定不依赖于断点的位置,但是与变量的作用域有关。也就是说,要设置监视点必须在程序运行时才可设置。捕捉点catchevent:当event发生时,停止执行程序event可为以下情况:throw:一个C+抛出的异常(throw为关键字)catch:一个C+捕捉到的异常(catch为关键字)exec:调用系统调用exec时(exec为关键字,目前此功能只在HP-UX下有用)fork:调用系统调用fork时(fork为关键字,目前此功能只在HP-UX下有用)vfork:调用系统调用vfork时(vfork为关键字,目前此功能只在HP-UX下有用)load或load载入共享库(动态链接库)时(load为关键字,目前此功能只在HP-UX下有用)unload或unload卸载共享库(动态链接库)时(unload为关键字,目前此功能只在HP-UX下有用)4、恢复执行next(简写n):不进入的单步执行(gdb)next或nstep(简写s):进入的单步执行(gdb)step或scontinue(简写c):从断点继续运行(gdb)continuen参数n使gdb忽略接下来的n个断点。finish:程序已经进入了某函数,执行finish退出该函数返回到它的调用函数中(gdb)finishuntil:无参的until命令恢复程序的运行,并执行完循环的其余部分until官方定义:执行程序,直到到达当前循环体外的下一行源代码实际上,由于高级语言到机器语言在顺序上并不一定完全对应,until在到达内存地址比当前高的机器指令后就会停止用法:untilfilename:line_numberuntilfilename:function以上两种用法在到达指定的行号或者函数后即停止。5、变量赋值除了使用print给变量赋值,还可以使用setvariable命令赋值。setvariable:给变量赋值(gdb)setvariablei=16、函数调用callfunc_name:调用和执行一个函数(gdb)callgen_and_sork(1234,1,0)(gdb)callprintf(“abcdn”)abcd$1=4jump:在源程序中的另一点开始运行(gdb)jumpline_number7、栈信息backtrace(简写bt):为堆栈提供向后跟踪功能backtrace-nn显示程序中的当前位置和表示如何到达当前位置的栈跟踪。-n:表示只打印栈底上n层的栈信息n:表示只打印栈顶上n层的栈信息不加参数,表示打印所有栈信息。down:下移栈帧,使得另一个函数成为当前函数up:上移栈帧,使另一函数成为当前函数8、信号handlesignalsargu:捕捉信号signals:是Linux/Unix定义的信号,SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号等等。argu:nostop:接收到信号时,GDB不会停止程序的运行,但会打出消息通知收到这种信号。stop:接受到信号时停止程序的执行,允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)。print:接受到信号时显示一条消息。noprint:接受到信号时不要显示消息。passornoignore:接收到信号时,GDB不处理信号。这表示,GDB会把这个信号交给被调试程序处理。nopassorignore:接收到信号时,GDB不会让调试程序来处理这个信号。例如,假定截获SIGPIPE信号,以防止正在调试的程序接受到该信号,而且只要该信号一到达,就要求该程序停止,并通知你。要完成这一任务,可利用如下命令:(gdb)handleSIGPIPEstopprintUNIX的信号名总是采用大写字母!可以用信号编号替代信号名如果程序要测试其信号处理程序,就需要一种能将信号发送给程序的简便方法:signal命令。signal的参数是一个数字或者一个名字,如SIGINT。假定程序已将一个专用的SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成某个动作,要测试该信号处理程序,可设置一个断点并使用如下命令:(gdb)signal2continuingwithsignalSIGINT(2)该程序继续执行,但是立即传输该信号,而且处理程序开始运行。9、字段搜索searchtext:至上往下搜索,显示在当前
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级地理上册详细教学计划
- 2025年小学健康教育课程开发计划
- 医疗设备维护质量管理方案及措施
- 项目部管理工作流程信息透明化方案
- 聚酯瓶化学品迁移风险评估-洞察及研究
- 社交平台用户数据保密保证措施
- 新北师大版五年级下册数学家校共育计划
- 高一学生学习成长自我陈述报告范文
- 疫苗接种安全不良事件报告制度及流程
- 安全支撑软件创新创业项目商业计划书
- 提高麻醉后饮食护理知晓率
- 印刷行业职业健康卫生安全保护措施
- 清华紫光综保Dcap3000系列Modbus网络通讯协议-协议说明
- 国家电投集团山西公司招聘笔试题库2025
- 机电设备图纸深化设计质量保证措施
- 2016版山东省建设工程消耗量定额价目表 山东省建筑工程价目表
- 2025年湖北省中考英语试题(附答案)
- 园区出入口设备管理制度
- 2025至2030中国城市轨道交通供电系统行业发展趋势分析与未来投资战略咨询研究报告
- 花岗岩循环荷载作用下的力学性能研究
- 红娘合伙人协议书
评论
0/150
提交评论