在 GDB 调试过程中,设置断点并在断点处停下来后,你可以执行一系列操作来检查、修改程序的状态,或继续调试。以下是一些常用操作指令:
查看变量和内存
-
查看当前栈帧的局部变量:
info locals
-
查看特定变量的值:
print variable_name
-
查看特定内存地址的值:
x /nfu address
n
:显示的单元数f
:格式(如d
表示十进制,x
表示十六进制)u
:单位(如b
表示字节,w
表示字)
修改变量和内存
-
修改变量的值:
set variable_name = new_value
-
修改内存的值:
set {type} address = new_value
例如,修改一个
int
类型的值:set {int} 0x7fffffffe1b0 = 10
堆栈操作
-
查看当前堆栈帧信息:
info frame
-
查看调用栈:
backtrace
或者简写:
bt
-
切换到某个特定的栈帧:
frame frame_number
-
查看特定栈帧的局部变量:
info locals
设置和管理断点
-
设置断点:
break function_name
或者在特定行号设置断点:
break filename:line_number
-
列出所有断点:
info breakpoints
-
启用/禁用断点:
enable breakpoint_number disable breakpoint_number
-
删除断点:
delete breakpoint_number
继续执行
-
继续执行程序:
continue
或者简写:
c
-
单步执行程序(逐行执行):
step
或者简写:
s
-
单步执行,不进入函数调用(逐过程执行):
next
或者简写:
n
条件断点
- 为断点设置条件:
condition breakpoint_number condition_expression
程序运行状态检查
- 检查程序是否已结束:
info program
堆栈回溯与变量观察
-
获取程序的执行历史:
info registers
-
查看指定寄存器的值:
print $register_name