选择特殊符号
选择搜索类型
请输入搜索
要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<;和>;)和shell通配符(*、?、[、])在内。如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。
(gdb) file a.out //加载被调试的可执行程序文件。
(gdb)set args –b –x
(gdb) show args
(gdb)r //执行程序
backtrace命令为堆栈提供向后跟踪功能。
Backtrace 命令产生一张列表,包含着从最近的过程开始的所有有效过程和调用这些过程的参数。
List
(gdb) list line1,line2
查看源代码
list lineNum 在lineNum的前后源代码显示出来
list 列出当前行的后面代码行
list - 列出当前行的前面代码行
list function
set listsize count
设置显示代码的行数
show listsize
显示打印代码的行数
list first,last
显示从first到last的源代码行
2009年12月29日,程序调试工具 GDB 7.0.1 发布,新版本修正了7.0版本的一些严重的堆栈溢出bug,这些bug可能导致 GDB 调试进程中断,修正了在 FreeBSD 和 IRⅨ 系统下无法编译的问题,增加了对 Thumb2调试的支持,还有其他一些小bug的修复。
2010年03月19日,GDB 7.1 发布,
详细改进内容:多程序调试的支持;
位置独立的可执行文件(派)调试的支持;
新的目标(包括一个模拟器):Xilinx MicroBlaze和瑞萨RX;
Python支持增强;
c 支持扩展;
新tracepoint功能;
过程记录的改进;
远程协议扩展。
2010年09月06日 ,GDB 7.2 发布,
该版本改进记录:
⒈ 支持D语言
⒉ C 改进,支持参数依赖查找ADL,静态常量类成员和改进了用户自定义操作符的支持
⒊ Python 调试的改进,包括断点、符号、符号表、程序空间、线程等可通过命令行进行操作
⒋ Furthermore,enhancements were made for tracepoints and for GDBserver.在跟踪点和GDB程序上有了改善。
⒌ 支持 ARM Symbian 平台
⒍ 其他方面的改进和bug修复。
2011年08月26日,GDB 7.3a 发布,
变化:
1。GDB可以理解线程的名字。
2。这个命令”线程名称”(指定一个名称)和“线程找到[REGEXP]”(匹配名称、目标ID,或者额外的信息)被添加。
3。Python脚本支持大大增强。
4。在c 的支持,异常处理是提高,模板参数放在范围在一个实例化时调试。
5。线程调试的核心转储在GNU / Linux成为可能。
6。最初支持C语言版本的OpenCL。
7。许多其他改进。
一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
利用print 命令可以检查各个变量的值。
(gdb) print p (p为变量名)
print 是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,还可以包含以下内容:
对程序中函数的调用
(gdb) print find_entry(1,0)
数据结构和其他复杂对象
(gdb) print *table_start
={e=reference=’\000’,location=0x0,next=0x0}
值的历史成分
(gdb)print (为历史记录变量,在以后可以直接引用的值)
人为数组
人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中在变量h后面的10个整数,一个动态数组的语法如下所示:
base@length
因此,要想显示在h后面的10个元素,可以使用h@10:
(gdb)print h@10
=(-1,345,23,-234,0,0,0,98,345,10)
whatis命令可以显示某个变量的类型
(gdb) whatis p
type = int *
break命令(可以简写为b)可以用来在调试的程序中设置断点,该命令有如下四种形式:
break line-number 使程序恰好在执行给定行之前停止。
break function-name 使程序恰好在进入指定的函数之前停止。
break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止。
break routine-name 在指定例程的入口处设置断点
如果该程序是由很多原文件构成的,你可以在各个原文件中设置断点,而不是在当前的原文件中设置断点,其方法如下:
(gdb) break filename:line-number
(gdb) break filename:function-name
要想设置一个条件断点,可以利用break if命令,如下所示:
(gdb) break line-or-function if expr
例:
(gdb) break 46 if testsize==100
从断点继续运行:continue 命令
1.显示当前gdb的断点信息:
(gdb) info break
他会以如下的形式显示所有的断点信息:
Num Type Disp Enb Address What
1 breakpoint keep y 0x000028bc in init_random at qsort2.c:155
2 breakpoint keep y 0x0000291c in init_organ at qsort2.c:168
删除指定的某个断点:
(gdb) delete breakpoint 1
该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点
(gdb) delete breakpoint
禁止使用某个断点
(gdb) disable breakpoint 1
该命令将禁止断点1,同时断点信息的 (Enb)域将变为 n
允许使用某个断点
(gdb) enable breakpoint 1
该命令将允许断点1,同时断点信息的 (Enb)域将变为 y
清除源文件中某一代码行上的所有断点
(gdb)clear number
注:number 为源文件的某个代码行的行号
2.设置条件断点
例子:
#includeintmain(void) { inti=0; intsum=0;for(i=1;i<=200;i ) { sum =i; }printf("%d ",sum); return0; }
gdb可以设置条件断点,也就是只有在条件满足时,断点才会被触发,命令是“break … if cond”。以上面程序为例:
(gdb)start Temporarybreakpoint1at0x4004cc:filea.c,line5. Startingprogram:/data2/home/nanxiao/aTemporarybreakpoint1,main()ata.c:5 5inti=0; (gdb)b10ifi==101 Breakpoint2at0x4004e3:filea.c,line10. (gdb)r Startingprogram:/data2/home/nanxiao/aBreakpoint2,main()ata.c:10 10sum =i; (gdb)psum $1=5050
可以看到设定断点只在i的值为101时触发,此时打印sum的值为5050。
whatis:识别数组或变量的类型
ptype:比whatis的功能更强,他可以提供一个结构的定义
set variable = value:将值赋予变量
print variable = value or p variable = value : 除了显示一个变量的值外,还可以用来赋值
next 不进入的单步执行
step 进入的单步执行如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish
call name 调用和执行一个函数
(gdb) call gen_and_sork(1234,1,0)
(gdb) call printf(“abcd”)
=4
finish 结束执行当前函数,显示其返回值(如果有的话)
有一组专用的gdb变量可以用来检查和修改计算机的通用寄存器,gdb提供了目 前每一台计算机中实际使用的4个寄存器的标准名字:
$pc :程序计数器
$fp :帧指针(当前堆栈帧)
$sp :栈指针
$ps :处理器状态
gdb通常可以捕捉到发送给它的大多数信号,通过捕捉信号,它就可决定对于正在运行的进程要做些什么工作。例如,按CTRL-C将中断信号发送给gdb,通常就会终止gdb。但是你或许不想中断gdb,真正的目的是要中断gdb正在运行的程序,因此,gdb要抓住该信号并停止它正在运行的程序,这样就可以执行某些调试操作。
Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:
nostop 接收到信号时,不要将它发送给程序,也不要停止程序。
stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)
print 接受到信号时显示一条消息
noprint 接受到信号时不要显示消息(而且隐含着不停止程序运行)
pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。
nopass 停止程序运行,但不要将信号发送给程序。
例如,假定你截获SIGPIPE信号,以防止正在调试的程序接受到该信号,而且只要该信号一到达,就要求该程序停止,并通知你。要完成这一任务,可利用如下命令:
(gdb) handle SIGPIPE stop print
请注意,UNⅨ的信号名总是采用大写字母!你可以用信号编号替代信号名如果你的程序要执行任何信号处理操作,就需要能够测试其信号处理程序,为此,就需要一种能将信号发送给程序的简便方法,这就是signal命令的任务。该命令的参数是一个数字或者一个名字,如SIGINT。假定你的程序已将一个专用的SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,要想测试该信号处理程序,你可以设置一个断点并使用如下命令:
(gdb) signal 2
continuing with signal SIGINT⑵
该程序继续执行,但是立即传输该信号,而且处理程序开始运行。
GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNⅨ下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。
于是UNⅨ下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成。在这里并不是要和Windows做个什么比较,所谓“寸有所长,尺有所短”,图形化工具还有时不如命令行的地方。2100433B
关于建设工程价款优先受偿权在执行程序中的适
建设工程价款优先受偿权在执行程序中的适用 杨晶 《中华人民共和国合同法》第 286条规定:“发包人未按照约定支付价款的,承包人可以催告发包人 在合理的期限内支付价款。发包人逾期不支付的,除按照建设工程性质不宜折价、拍卖的以外,承包人可 以与发包人将该工程协议折价,也可以申请人民法院将该工程依法拍卖,并优先受偿。”合同法该条款赋 予了建设工程承包人在发包人不支付工程价款的情况下享有对该建设工程的优先受偿权。 2002年 6 月,最高人民法院又颁布了 《关于建设工程价款优先受偿权问题的批复》 (以下简称《批复》), 进一步确立了建设工程承包人的优先受偿权优先于一般抵押权和其它债权的原则。 这里,笔者结合《批复》、 法学界因此进行的学术讨论以及个人的执行工作实践,就《合同法》第 286 条在实际适用中的若干问题进 行探讨。 一、建设工程价款优先受偿权发生竞合时的处理原则 建设工程价款优先受偿的标
房屋维修养护管理制度的制定及执行程序
房屋维修养护管理制度的制定 及执行程序 1.确立房屋维修管理的责任范围制度 房屋维修管理是一项十分复杂的系统工程。 企业应对所管房屋各 项检修范围责任落实到人,资金、材料落实到班组。每一间房屋都要 建立完备的档案和检修记录。 对重要建筑物和危险房屋还要委派专人 定时巡回检修。 2.定期检查维修制度的制定 定期检查制度包括定期普查制度、 冬雨检查制度以及大风、 大雨 雪、有感地震以后的临时检查制度等等。 对于房屋的不同结构部位及 不同装修设备还要有定期维修更换制度。 工程管理部门一般每年都要 对所管房屋进行一次全面普查, 普查大都利用冬闲时间、 安排在每年 年初至 3月 l5 日前完成。房屋普查要逐幢逐间对房屋的使用状态、 基础、结构、材料的破损变形受力状况、装修设备的完好状况逐项进 行全面检查,认真记录,并对整幢房屋及各分项的完好等级做出准确 评价,填列表格, 以便房管部门安排年度维修计划
OpenWrt是在实现路由器功能方面很受欢迎的开源软件之一。本书基于OpenWrt,详细介绍了智能路由器的开发。
本书共计15章,按照认识路由器的顺序进行编写,介绍了智能路由器、开发环境及编译分析、OpenWrt包管理系统、OpenWrt配置、软件开发、GDB调试、网络基础知识、路由器基础软件模块、常用软件模块、IP路由、DNS与DHCP、iptables防火墙、UCI防火墙、UPnP、网络测试及分析工具等。丰富的理论知识和代码示例可以帮助读者深入认识和理解OpenWrt技术,并能够提升开发水平和开发效率。
本书适合软件架构师、软件开发工程师、软件测试工程师以及计算机相关专业的学生阅读。读者通过阅读本书,不仅可以掌握OpenWrt技术,还能进一步提升自己的软件开发水平。
由于光电倍增管增益高和响应时间短,又由于它的输出电流和入射光子数成正比,所以它被广泛使用在天体光度测量和天体分光光度测量中。其优点是:测量精度高,可以测量比较暗弱的天体,还可以测量天体光度的快速变化。天文测光中,应用较多的是锑铯光阴极的倍增管,如RCA1P21。这种光电倍增管的极大量子效率在4200埃附近,为20%左右。还有一种双碱光阴极的光电倍增管,如GDB-53。它的信噪比的数值较RCA1P21大一个数量级,暗流很低。为了观测近红外区,常用多碱光阴极和砷化镓阴极的光电倍增管,后者量子效率最大可达50%。
普通光电倍增管一次只能测量一个信息,即通道数为1。矩阵。由于通道数受阳极末端细金属丝的限制,只做到上百个通道。
七波长高温计是MSTC一E16多光谱高温计的组成部分之一。图1给出了七波长高温计的原理方框图。
卡塞格林望远镜将材料表面成象在入射小孔盘(2)上。人射小孔盘圆周上加工有六个小孔,最小的有效直径为0.82毫米。选择小孔就可以限制被测表面元的大小。进人小孔的辐射经镜(3)准直,通过干涉滤光片组(4)、减光玻璃`片(5),达到GDB一239型光电倍增管(6)的阴极灵敏面上。干涉滤光片组(4)装在转盘的圆周上,转盘用同步电机驱动。滤光片的峰值波长为4970埃、5990埃、6510埃、6990埃、5010埃、名990埃、9978埃。减光玻璃片(5)采用与被测对象的光谱分布、光电倍增管的光谱灵敏度相匹配的玻璃片,既起到了压缩光电倍增管阳极输出的动态范围,也起到了使光电倍增管运行在线性区的作用。与原论证方案中采用对数放大器相比,还提高了系统精度。因为对数放大器受对数元件的影响,目前只能达到1%的精度。光电倍增管输出的讯号经前置放大、主放大,最后由电子示波器显示,照相机拍照记录。
这台高温计的讯号周期为10毫秒,它隐含着一个假设,即在10毫秒内,材料表面温度和辐射特性是不变的。测量结果证明,这个假设是正确的。当烧蚀处于稳态时,周期间的讯号变化不大。 2100433B