gdb常用命令¶
- 运行程序:
run
: 启动程序执行,可以带参数,如run arg1 arg2
。-
start
: 启动程序并在main函数处停下来。 -
断点:
break
(b
): 设置断点,可以在某行号上设置断点,如b 10
,也可以在函数名上设置断点,如b main
。delete
: 删除指定断点,如delete 1
。disable
: 禁用指定断点,如disable 1
。enable
: 启用指定断点,如enable 1
。-
clear
: 清除指定行号上的断点,如clear 10
。 -
查看和操作代码执行:
list
(l
): 显示当前执行点附近的代码,如list
或list 1,10
。step
(s
): 逐过程单步执行,进入函数。next
(n
): 单步执行,跳过函数。continue
(c
): 继续执行直到遇到下一个断点或程序结束。-
finish
: 运行直到当前函数返回。 -
查看和修改变量:
print
(p
): 打印变量的值,如print x
。display
: 持续打印某个变量的值。-
set
: 修改变量的值,如set x = 10
。 -
查看栈信息:
backtrace
(bt
): 显示当前的调用栈。-
frame
(f
): 切换当前帧,如frame 2
。 -
查看内存:
-
x
: 查看内存中的内容,如x/nfu address
,其中n是显示数量,f是显示格式(如x表示十六进制),u是单位大小(如b表示字节)。 -
查看寄存器:
-
info registers
(i r
): 显示当前的寄存器值。 -
设置断点条件:
-
break if
: 在设置断点时指定条件,如break 10 if x > 5
。 -
设置观察点:
-
watch
: 监视某个变量,当它的值发生改变时中断程序的执行。 -
附加调试到正在运行的进程:
attach
: 附加到正在运行的进程进行调试,如attach PID
。
-
分析崩溃信息:
core
: 分析core dump文件,如gdb executable core
。
-
退出GDB:
quit
(q
): 退出GDB。
-
disas
:简写为d
,用于显示当前执行位置附近的汇编代码。 stepi
:简写为s
,用于单步执行一条汇编指令。nexti
:简写为n
,用于执行下一条汇编指令,但是会跳过函数调用。finish
:简写为f
,用于执行完当前函数并停止在调用它的地方。break *address
:简写为b *address
,用于在指定地址设置断点。info registers
:简写为i r
,用于显示当前所有寄存器的值。x/nfu address
:简写为x/nfu addr
,用于显示内存中从指定地址开始的n个单位的内容。set $register=value
:简写为set $reg=val
,用于设置某个寄存器的值。display $register
:简写为disp $reg
,用于在每次停下来时显示某个寄存器的值。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