Linux下编程工具的使用(5) - GDB调试工具(2)
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-30
查看对象选项的设置. set print static-members <on/off> 表示当显示一个C 对象中的内容是,是否显示其中的静态数据成员.默认是on. show print static-members 查看静态数据成员选项设置. set print vtbl <on/off> 当此选项打开时,GDB将用比较规整的格式来显示虚函数表时.其默认是关闭的. show print vtbl 查看虚函数显示格式的选项. 八、历史记录 当你用GDB的print查看程序运行时的数据时,你每一个print都会被GDB记录下来.GDB会以$1, $2, $3 .....这样的方式为你每一个print命令编上号.于是,你可以使用这个编号访问以前的表达式,如$1.这个功能所带来的好处是,如果你先前输入了一个比较长的表达式,如果你还想查看这个表达式的值,你可以使用历史记录来访问,省去了重复输入. 九、GDB环境变量 你可以在GDB的调试环境中定义自己的变量,用来保存一些调试程序中的运行数据.要定义一个GDB的变量很简单只需.使用GDB的set命令.GDB的环境变量和UNIX一样,也是以$起头.如: set $foo = *object_ptr 使用环境变量时,GDB会在你第一次使用时创建这个变量,而在以后的使用中,则直接对其賦值.环境变量没有类型,你可以给环境变量定义任一的类型.包括结构体和数组. show convenience 该命令查看当前所设置的所有的环境变量. 这是一个比较强大的功能,环境变量和程序变量的交互使用,将程序调试更为灵活便捷.例如: set $i = 0 print bar[$i ]->contents
于是,当你就不必,print bar[0]->contents, print bar[1]->contents地输入命令了.输入这样的命令后,只用敲回车,重复执行上一条语句,环境变量会自动累加,从而完成逐个输出的功能. 十、查看寄存器 要查看寄存器的值,很简单,可以使用如下命令: info registers 查看寄存器的情况.(除了浮点寄存器) info all-registers 查看所有寄存器的情况.(包括浮点寄存器) info registers <regname ...> 查看所指定的寄存器的情况. 寄存器中放置了程序运行时的数据,比如程序当前运行的指令地址(ip),程序的当前堆栈地址(sp)等等.你同样可以使用print命令来访问寄存器的情况,只需要在寄存器名字前加一个$符号就可以了.如:p $eip. 程序执行顺序 一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次运行中走遍程序的所有分支. 一、修改变量值 修改被调试程序运行时的变量值,在GDB中很容易实现,使用GDB的print命令即可完成.如: (gdb) print x=4 x=4这个表达式是C/C 的语法,意为把变量x的值修改为4,如果你当前调试的语言是Pascal,那么你可以使用Pascal的语法:x:=4. 在某些时候,很有可能你的变量和GDB中的参数冲突,如: (gdb) whatis width type = double (gdb) p width
$4 = 13 (gdb) set width=47 Invalid syntax in expression. ,set width是GDB的命令,,出现了“Invalid syntax in expression”的设置错误,此时,你可以使用set var命令来告诉GDB,width不是你GDB的参数,而是程序的变量名,如: (gdb) set var width=47 另外,还可能有些情况,GDB并不报告这种错误,保险起见,在你改变程序变量取值时,最好都使用set var格式的GDB命令. 二、跳转执行 一般来说,被调试程序会按照程序代 |
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 憋曲的面试失败经历下一篇: linux培训课程第七天:ppt以及笔记
关于Linux下编程工具的使用(5) - GDB调试工具(2)的所有评论