您的位置:首页 > 其它

GDB常用命令的用法

2017-01-04 17:40 218 查看
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要有以下四个功能:

启动程序,可以按照工程师自定义的要求运行程序;

让被调试的程序在工程师的指定的断点处停住,断点可以是条件表达式;

当程序被停住时,可以检查此时程序中所发生的事,并追踪上文;

下面就GDB常用的命令进行介绍:

list命令

list < linenum >:显示程序第linenum行周围的源程序;

list < function >:显示函数名为function的函数的源程序;

list:显示当前行后面的源程序;

list -:显示当前行前面的源程序。

run命令

在GDB中,运行程序使用run命令,简写为r。在程序运行前,我们可以设置如下4个方面的工作环境。

(1)程序运行参数:使用set args可指定运行时参数,如set args 10 20 30,用show args命令可查看设定的参数;

(2)运行环境:用path < dir >可设定程序的运行路径,用show paths可查看程序的运行路径;用set environment varname[=value]可设置环境变量,如set env USER=myname;用show environment[varname]则可查看环境变量。

(3)工作目录:cd < dir >相当于shell的cd命令,pwd可现实当前所在的目录;

(4)程序的输入输出:info terminial用于显示程序用到的终端的模式;在GDB中可使用重定向程序输出,如run>outfile;用tty命令可以指定输入输出的终端设备,如/dev/ttyS1。

break命令

break命令的作用是设定置断点,简写为b,设置断点的方法如下:

(1)b < function >:在进入函数时停住;

(2)b < linenum >:在指定行号停住;

(3)b +offset / b -offset:在当前行号的前面或者后面的offset行停住;

(4)b filename:linenum:在源文件filename的linenum行停住;

(5)b filename:function:在源文件filename的function函数的入口处停住;

(6)b *address:在程序运行的内存地址处停住;

(7)b:没有参数时,表示在下一条指令处停住;

(8)b…if< condition >:…可以是上述的< linenum >,+offset / b -offset等参数,condition表示条件,在条件成立时停住,如break if i=100,表示当i=100时停住;

查看断点使用info命令。

单步命令

next命令用于单步执行,但不进入函数内部,简写为n;step命令在单步执行一个函数时,进入函数内部,简写为s。

(1)s < count >:单步跟踪,如果有函数调用,则进入该函数。count表示执行后面的count条指令然后停住;

(2)n < count >:单步跟踪,如果有函数调用,不进入该函数。count表示执行后面的count条指令然后停住;

(3)set step-mode:set step-mode on用于打开step-mode模式,在进行单步跟踪时,若跨越某没有调试信息的函数,程序的执行则会在该函数的第一条指令处停住,而不会跳过整个函数。这样我们可以查看该函数的机器指令;

(4)finish:简写为fin。表示运行程序直到当前函数完成返回,并打印函数返回时的堆栈地址、返回值及参数值等信息;

(5)until:简写为u。运行程序直到退出循环体;

continue命令

简写为c。表示当程序被停住后,可以使用c命令回复程序的运行直到程序结束,或者到达下一个断点。

print命令

简写为p。当程序被停住时,可使用p命令查看当前程序的运行数据,其格式为:

p < expr >

p /< f > < expr >

其中:

< expr >是变量或表达式。比如p sum表示查看变量sum的值,如果sum是静态数组名,则表示查看数组的元素值,p *array@100表示查看动态数组的值,array表示起始地址,100表示长度;

< f >是输出的格式。支持的格式有:

(1)x:十六进制;

(2)d:十进制;

(3)u:十六进制格式显示无符号整型;

(4)o:八进制;

(5)t:二进制;

(6)c:字符格式;

(7) f:浮点格式。

watch命令

watch命令一般用来观察某个表达式的值是否有了变化,如果有变化则马上停止程序的运行。使用方法如下:

(1)watch < expr >:当表达式expr被读时停止程序运行;

(2)awatch < expr >:当表达式的值被读或者被写时停止程序运行;

(3)info watchpoints:列出当前所设置的所有观察点。

examine命令

简写为x。表示查看内存地址的值。其用法如下:

x /< n/f/u > < addr >

其中:

< addr >:内存地址;

n:一个正整数,表示显示内存的长度;

f:表示显示的格式,如果地址所指定的是字符串,那么格式可以是s;

u:表示从当前地址往后请求的字节数,不指定默认是4字节。b表示单字节,h表示双字节,w表示四字节,g表示八字节。

例如:x /3uh 0x54320表示从内存地址0x54320开始以及双字节(h)为一个单位、16进制方式(u)显示3个单位(3)的内存。

signal命令

使用signal命令可以产生一个信号量给被调试的程序。可以在程序运行的任意位置处设置断点,并在该断点处用GDB产生一个信号量,这种精确地在某处产生信号的方法非常有利于程序的调试。其格式为

signal < signal >

其中

< signal >:信号量,一般为1~15;

disassemble命令

disassemble命令用于反汇编,可用它来查看当前执行时的源代码的机器码,实际上只是把当前内存中的指令冲刷出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: