(6)print(p)命令
这个命令比较常用,用来查看我们想看的内容。比如有关数组可以看全部,也可以看从左到右某一部分:
print命令针对变量查看的输出格式有:
x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十六进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量t 按二进制格式显示变量
a 按十六进制格式显示变量
c 按字符格式显示变量
f 按浮点数格式显示变量
(7)watch命令
这个命令比较有用。watch一般用来观察某个表达式(变量也是一种表达式)的值是否有变化,如果有变化,马上停住程序。我们有一下几种方法设置观察点:
watch expr 为表达式expr设置一个观察点,一旦表达式值有变化,马上停住程序
rwatch expr 当表达式expr被读时,停住程序
awatch expr 当表达式的值被读或被写时,停住程序。
info watchpoints 列出所有观察点(info指令通常可以去套 举例如下,演示观测*i的值,一旦变化停下来:
在循环中我们也可以使用watch,配合ignore,它是除了until命令之外又一个可以让我们跳出循环的方法,不过watch+ignore更强大,可以任意跳转到第i次循环。它们的意思就是观察一个变量,可以理解为断点,ignore这个断点多少次,然后用continue就可以直接跳过了。
(8)examine命令
使用该命令来查看内存地址中的值。语法是:x/u addr
addr表示一个内存地址。“x/”后的n、f、u都是可选的参数,n
是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容;f
表示显示的格式,如果地址所指的是字符串,那么格式可以是s,如果地址是指令地址,那么格式可以是i;u
表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4字节。u参数可以被一些字符代替:b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指定的内存地址开始,读写指定字节,并把其当作一个值取出来。n、f、u这3个参数可以一起使用,例如命令“x/3uh
0x54320”表示从内存地址0x54320开始以双字节为1个单位(h)、16进制方式(u)显示3个单位(3)的内存。
(9)jump命令
jump命令不会改变程序栈的内容,一般只在同一函数内跳转。
jump linespec 指定下一条语句的运行点,linespec可以是linenum,filename+linenum,+offset这几种形式
jump address 跳到代码行的地址
(10)signal命令
使用signal 信号名(如SIGINT)这种方式把信号发送给程序,如果程序注册了signal_handler函数,还可以进行相应的处理,帮助调试程序。
(11)set命令
set args 设置命令行参数
set env environmentVarname=value 设置环境变量。如:set env USER=benben
(12)call命令
call function 强制调用某函数
强制调用某函数,它会显示函数返回值(如果函数返回值不是void)。print命令也可以完成该功能。
(13)disassemble命令
反汇编命令,查看执行时源代码的机器码。