break b 设置断点。
run r 开始运行程序。运行到第一个断点位置,如果没有断点就直接运行结束。
next n 执行当前行。如果当前行包含函数调用,不会进入函数。
step s 执行当前行。如果当前行包含函数调用,则进入函数,执行函数体第一条语句。注意,如果函数是库函数或者第三方提供的函数,由于没有源代码,也无法进入函数体。
print p 显示变量或表达式的值。
continue c 继续运行程序,直到下一个断点或者程序结束。
set var name = value 设置变量的值。
quit q 退出gdb环境。
finish fin 跳出当前函数
(gdb) list/l 行号或函数名 //列出源码
(gdb) l 30
25 int* pa = new int[10];
26 memset(pa, 10*sizeof(int), 0);
27 printf("pa[0]:%d, pa[-1]:%d\n", pa[0], *(pa-4));
28 pa[1] = 1, pa[2]=2, pa[3]=3;
29 --pa;
30 printf("cur *pa:%d\n", *pa);
31 }
32
33 int main()
34 {
(gdb) break 29
Breakpoint 2 at 0x4007be: file mem.cpp, line 29.
显示内容太多出现省略号时执行:set print elements 0,之后就会显示全部内容
backtrace/bt //查看函数调用栈帧
frame/f //选择栈帧,再查看局部变量
p *array@len //打印指针array指向地址的len长度的内容
print *(int*)p@10 //以int格式打印指针p指向地址中10长度的值
set var sum=0 //修改变量值
set args 设置主程序的参数
display/undisplay sum //每次停下显示变量的值/取消跟踪
delete breakpoints 2 //删除某个断点
disable/enable breakpoints 3 //禁用/启用某个断点
break 9 if sum != 0 //满足条件才激活断点
watch input[4] //设置观察点
x/7b input //打印存储器内容,b--每个字节一组,7--7组
disassemble/disas //反汇编当前函数或指定函数
si // 一条指令一条指令调试 而 s 是一行一行代码
thread apply bt all 调试core时查看所有线程堆栈
x/
x:examine的缩写
n、f、u是可选的参数。
也就是说从当前地址向后显示几个地址的内容。
(gdb) x/1 pa
0x602010: 0
(gdb) x/2 pa
0x602010: 0 1
(gdb) x/3 pa
0x602010: 0 1 2
(gdb) x/4 pa
0x602010: 0 1 2 3
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
(gdb) x/4d pa
0x602010: 0 1 2 3
(gdb) x/4x pa
0x602010: 0x00000000 0x00000001 0x00000002 0x00000003
(gdb) x/4u pa
0x602010: 0 1 2 3
(gdb) x/4o pa
0x602010: 0 01 02 03
(gdb) x/4t pa
0x602010: 00000000000000000000000000000000 00000000000000000000000000000001 00000000000000000000000000000010 00000000000000000000000000000011
如果不指定的话,GDB默认是4个bytes。
u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。
当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。
(gdb) x/4dh pa
0x602010: 0 0 1 0
(gdb) x/16db pa
0x602010: 0 0 0 0 1 0 0 0
0x602018: 2 0 0 0 3 0 0 0
(gdb) x/16b pa
0x602010: 0 0 0 0 1 0 0 0
0x602018: 2 0 0 0 3 0 0 0
(gdb) x/16h pa
0x602010: 0 0 1 0 2 0 3 0
0x602020: 0 0 0 0 0 0 0 0
(gdb) x/16w pa
0x602010: 0 1 2 3
0x602020: 0 0 0 0
0x602030: 0 0 135121 0
0x602040: 0 0 0 0