c = co = cont = continue


s = step and si = stepi


n = next


step:下一条指令(如果有函数,进入函数(内核提供的函数进不去))。


next:下一条指令(不进入函数)。

si和ni针对汇编指令而不是代码行。

continue(c):执行到下一个断点。

finish:一直执行代码直至当前函数返回。

advance <location> :一直执行代码直到。


break <location> :设置断点(b 函数名或者b 代码行数)



断点可以是addresses (“ *0x7c00 ”)、names (“mon backtrace ”, “ monitor.c:71 ”).



使用delete, disable, enable修改断点。




break <location> if <condition>使用条件。




cond <number> <condition>在断点添加条件。




x 打印内存中的内容  (x/x 16进制 ,  etc  x/s 0x...,以char*类型打印).




print :打印C表达,有时比x更好用。(p $rax )




info registers:打印寄存器中的值。




info frame :打印当前栈帧。




list <location> :打印  特定位置的源代码。




backtrace:?




layout <name> :提供可视化界面查看信息(layout asm以汇编代码查看,layout src以源代码的方式查看)




disas 函数名:查看函数的汇编代码




set var 变量 =  设置变量的值




set args :设置主程序的参数




 ./demo a b c  =>    (gdb) set args a b c 





打印出存储在地址 0x7fffffffe340 处的整型值

 p  *(int*) 0x7fffffffe340 


 *(int*) 是一个类型转换,将一个指针转换为一个指向整型的指针。在这个例子中,它告诉GDB在内存地址 0x7fffffffe340 处存储的是一个整型值。




vim hello.c

#include<stdio.h>
int main(){
   int i=0;
   int j=0;
   for(int t=0;t<5;t++){
     i++;
     j++;
   }
}

编译gcc -g hello.c,生成a.out(需要加上-g参数)

调试:gdb ./a.out

记录gdb使用_算法

出现Reading symbols,说明成功进入gdb。

start:开始调试

记录gdb使用_代码行数_02

list:查看源代码

记录gdb使用_算法_03

step:进入下一步

记录gdb使用_代码行数_04

info locals:查看变量

记录gdb使用_GDB_05