Skip to content

gdb常用命令

  1. 运行程序
  2. run: 启动程序执行,可以带参数,如run arg1 arg2
  3. start: 启动程序并在main函数处停下来。

  4. 断点

  5. break (b): 设置断点,可以在某行号上设置断点,如b 10,也可以在函数名上设置断点,如b main
  6. delete: 删除指定断点,如delete 1
  7. disable: 禁用指定断点,如disable 1
  8. enable: 启用指定断点,如enable 1
  9. clear: 清除指定行号上的断点,如clear 10

  10. 查看和操作代码执行

  11. list (l): 显示当前执行点附近的代码,如listlist 1,10
  12. step (s): 逐过程单步执行,进入函数。
  13. next (n): 单步执行,跳过函数。
  14. continue (c): 继续执行直到遇到下一个断点或程序结束。
  15. finish: 运行直到当前函数返回。

  16. 查看和修改变量

  17. print (p): 打印变量的值,如print x
  18. display: 持续打印某个变量的值。
  19. set: 修改变量的值,如set x = 10

  20. 查看栈信息

  21. backtrace (bt): 显示当前的调用栈。
  22. frame (f): 切换当前帧,如frame 2

  23. 查看内存

  24. x: 查看内存中的内容,如x/nfu address,其中n是显示数量,f是显示格式(如x表示十六进制),u是单位大小(如b表示字节)。

  25. 查看寄存器

  26. info registers (i r): 显示当前的寄存器值。

  27. 设置断点条件

  28. break if: 在设置断点时指定条件,如break 10 if x > 5

  29. 设置观察点

  30. watch: 监视某个变量,当它的值发生改变时中断程序的执行。

  31. 附加调试到正在运行的进程

    • attach: 附加到正在运行的进程进行调试,如attach PID
  32. 分析崩溃信息

    • core: 分析core dump文件,如gdb executable core
  33. 退出GDB

    • quit (q): 退出GDB。
  34. disas:简写为d,用于显示当前执行位置附近的汇编代码。

  35. stepi:简写为s,用于单步执行一条汇编指令。
  36. nexti:简写为n,用于执行下一条汇编指令,但是会跳过函数调用。
  37. finish:简写为f,用于执行完当前函数并停止在调用它的地方。
  38. break *address:简写为b *address,用于在指定地址设置断点。
  39. info registers:简写为i r,用于显示当前所有寄存器的值。
  40. x/nfu address:简写为x/nfu addr,用于显示内存中从指定地址开始的n个单位的内容。
  41. set $register=value:简写为set $reg=val,用于设置某个寄存器的值。
  42. display $register:简写为disp $reg,用于在每次停下来时显示某个寄存器的值。
  43. layout asm:简写为layout a,用于显示汇编代码和寄存器窗口。

x/10i表示以汇编指令的格式打印内存中的内容。其中,x表示以十六进制的格式显示,10表示打印10条指令,i表示以汇编指令的格式显示。

例如,当你使用命令x/10i $pc时,它会打印出当前指令指针所指向的位置的十六进制内容,并将其解析为对应的汇编指令。

gdb常用指令

b # 打断点 (e.g.     b main | b *0x30)
c # continue

layout split # view src-code & asm-code

ni # 单步执行汇编(不进函数)
si # 单步执行汇编(有函数则进入函数)
n # 单步执行源码
s # 单步执行源码

p # print
p $a0 # 打印a0寄存器的值
p/x 1536 # 以16进制的格式打印1536
i r a0 # info registers a0
x/i 0x630 # 查看0x630地址处的指令
x/g 0x80000000 # 查看0x80000000地址处的值(g表示值的长度有64位)

推荐安装gdb-dashboard

GitHub - cyrus-and/gdb-dashboard: Modular visual interface for GDB in Python