Haoran Liao | 廖浩然

Back

GDB(GNU Debugger)提供了丰富的调试命令,涵盖代码运行、断点管理、变量查看、堆栈分析等多个方面。以下是 GDB 的所有主要调试命令,按类别分类:


1. 启动和退出#

命令说明
gdb program调试可执行文件 program
gdb --args program arg1 arg2传递参数给 program
gdb -p PID附加到进程 PID
q / quit退出 GDB

2. 运行程序#

命令说明
r / run [args]运行程序,可传递参数
start启动程序并停在 main() 之前
kill终止正在调试的程序

3. 断点(Breakpoints)#

命令说明
b / break func_name在函数 func_name 处设置断点
b line_number在当前源文件的 line_number 处设置断点
b file:line在指定文件 fileline 行处设置断点
b *address在内存地址 address 处设置断点
info breakpoints显示所有断点
delete [num]删除编号为 num 的断点(默认删除所有断点)
clear func_name清除函数 func_name 的断点
clear file:line清除 file 文件 line 行的断点
enable [num]启用编号为 num 的断点
disable [num]禁用编号为 num 的断点
condition num expr仅当 expr 为真时,触发编号为 num 的断点

4. 观察点(Watchpoints)#

命令说明
watch var监视变量 var 变化时暂停
rwatch var变量 var 被读取时暂停
awatch var变量 var 被读/写时暂停
info watchpoints显示所有监视点
delete watch num删除编号为 num 的监视点

5. 单步执行(Stepping)#

命令说明
s / step单步执行代码(进入函数内部)
n / next单步执行代码(不进入函数内部)
finish运行到当前函数返回
until运行到当前代码块结束

6. 继续执行#

命令说明
c / continue继续执行到下一个断点
jump line跳转到 line 行执行

7. 堆栈(Stack)#

命令说明
bt / backtrace显示当前调用栈
bt full显示完整的调用栈(包含参数和变量)
frame num切换到编号 num 的栈帧
up向上移动一层栈帧
down向下移动一层栈帧

8. 打印变量#

命令说明
p / print expr打印表达式 expr 的值
ptype var显示变量 var 的类型
whatis var显示变量 var 的类型
x addr以十六进制格式查看 addr 处的内存
x/4x addr以十六进制显示 addr 处的 4 个单位数据

9. 寄存器#

命令说明
info registers显示所有寄存器的值
p $eax打印寄存器 eax 的值

10. 信号(Signals)#

命令说明
handle SIGSEGV stopSIGSEGV 信号触发时暂停
handle SIGINT nostop忽略 SIGINT 信号

11. 调试共享库#

命令说明
info sharedlibrary显示加载的共享库
set solib-search-path path设置共享库搜索路径

12. 修改变量#

命令说明
set var = value修改变量值
set $eax = 0x1234修改寄存器值

13. 附加进程#

命令说明
attach PID附加到进程 PID
detach断开调试进程

14. 线程调试#

命令说明
info threads显示所有线程
thread num切换到 num 号线程
thread apply all cmd对所有线程执行 cmd

15. 脚本#

命令说明
source file运行 file 中的 GDB 命令
define cmd自定义命令
document cmd添加自定义命令的文档
save breakpoints file将断点信息保存到 file

16. GDB 调试 TUI 模式#

命令说明
layout src显示源码窗口
layout asm显示汇编窗口
layout regs显示寄存器窗口
tui enable启用 TUI 模式
tui disable禁用 TUI 模式
GDB常用指令
https://iaohr9.github.io/blog/gdb%E5%B8%B8%E7%94%A8%E6%8C%87%E4%BB%A4
Author Haoran Liao | 廖浩然
Published at November 30, 2024
Comment seems to stuck. Try to refresh?✨