gdb速查手册
写在前面:
有段时间没用gdb了,总是忘性很大,此次边查看边记录一下,方便后续使用。
1、启动GDB
#启动程序(假设程序名为 your_program)
gdb ./your_program
#或者attach到正在运行的进程
gdb -p <进程PID>
2、设置断点
b 设置断点
c 继续执行
客户端请求时,服务端在断点处停下
# 查看所有断点
info breakpoints
# 或简写
info b
i b
# 禁用某个断点
disable 1
# 启用某个断点
enable 1
# 删除某个断点
delete 1
# 或
d 1
3、逐行排查
n # next: 执行下一行(不进入函数内部)
s # step: 执行下一行(会进入函数内部)
c # continue: 继续执行到下一个断点
p # print: 打印变量
bt # backtrace: 查看调用栈
l # list: 显示当前代码
# up 1 让你可以查看调用当前函数的上层函数的上下文和变量,但不会改变程序执行状态,只是改变你查看的视角。
# 向上移动1层调用栈
up 1
# 向下移动1层调用栈
down 1
# 查看当前调用栈
bt # backtrace,显示完整调用栈
frame # 显示当前栈帧信息
4、常用快捷操作
# 查看当前代码位置
(gdb) l # list: 显示当前行附近的代码
(gdb) l 150 # 显示第150行附近的代码
# 查看调用栈
(gdb) bt # 查看完整调用栈
(gdb) frame 1 # 切换到上一层调用栈
(gdb) info locals # 查看当前函数的所有局部变量
(gdb) info args # 查看函数参数
# 直接执行到某一行
(gdb) until 160 # 执行到第160行
# 跳过循环
(gdb) until # 执行完当前循环
# 退出函数
(gdb) finish # 执行完当前函数并返回
5、退出
quit # 退出GDB
q # 简写
# 如果程序还在运行,会提示确认
# 强制退出(不提示)
quit -y
#结束当前程序执行
kill # 杀死正在调试的程序
k # 简写
# GDB本身不退出,可以重新run
continue # 继续执行直到结束或下一个断点
c # 简写
finish # 执行完当前函数并返回
fin # 简写
until # 执行到当前循环结束
u # 简写
until <line> # 执行到指定行
u 100 # 执行到第100行
6、快捷指令
Ctrl+D # 等同于quit(需要按两次)
Ctrl+C # 中断程序执行(进入GDB提示符)

浙公网安备 33010602011771号