gdb调试常用指令

断点的设置与删除

//设置
b [指定的函数名或内存地址] (if xxxxx)

info breakpoints/break //会显示当前所有的断点、断点号、断点位置等  

//删除
delte N //删除N号短点
delete  //删除所有断点

查看具体变量

print /[变量显示格式] [变量名]
p $[寄存器名称]

可以支持的变量显示格式有:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
如果变量是一个数组可通过@符号选择打印哪一个位置的元素

i [变量名]
i locals //查看局部变量

结束当前函数

finish

进入源码调试模式

layout split //展示c和汇编代码
layout source //仅展示c代码

tui窗口调试

tui enable //打开源代码展示窗口

查看寄存器

layout asm //查看汇编指令
layout reg //看到所有的寄存器信息
info reg

单步执行

next/n  //执行一行代码,如果是函数会跳过这个函数
step/s  //执行一行代码,如果遇到函数的话会进入函数的内部

查看当前调用栈

info frame  //查看当前调用栈

显示当前调用函数堆栈中的函数:

backtrace 或 bt
//如果对某个stack frame感兴趣,先定位到那个frame 再输入 info frame:
frame n
i frame

设置观察点

watch [变量名]

这样每次变量变化都会中断

x指令查看

使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示:

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

n、f、u是可选的参数。

  • n是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
  • f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果 地址是指令地址,那么格式可以是i。
  • u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

表示一个内存地址,n/f/u三个参数可以一起使用。例如:

命令:x/3uh 0x54320 

表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。

你可能感兴趣的:(#,gdb,gdb)