【实用】GDB调试保姆级教程|常用操作|附笔记

GDB调试常用操作

**打断点:**①b 函数名在某个函数出打断点;②b 行号在某行打断点

查看断点: i b

删除断点: d 断点编号

查看断点后会有断点的Num号

复制代码
(gdb) i b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000001149 in f at test.c:3
2       breakpoint     keep y   0x0000000000001160 in main at test.c:9
3       breakpoint     keep y   0x000000000000117c in main at test.c:12

运行GDB程序: start程序会停在main 函数入口;run遇到断点时停止

停止后继续运行: c

继续运行、直到遇到下一个断点或程序结束时再停止

单步调试: n向下执行一行代码、不会进入函数体;s向下执行一行代码、会进入函数体;finish跳出函数体

finish 会继续运行直到当前函数返回,并打印函数的返回值

**默认执行上条命令:**什么命令都不输入、直接敲回车、会默认执行上条命令

这条在单步调试时挺方便的

查看变量值: p 变量名打印变量值

查看变量类型: ptype 变量名打印变量类型

帮助文档: help

GDB调试高级操作

设置条件断点: b 10 if 条件

在第10行打一个断点,程序执行到第10行时。只有当条件满足,程序才会停下来

设置断点无效: disable 断点编号

设置断点生效: enable 断点编号

打印函数调用栈: bt

复制代码
(gdb) bt
#0  f () at test.c:3
#1  0x0000555555555172 in main () at test.c:10

注意:调用栈信息记得反过来看!

栈是先进后出的,所以,此时的调用栈的意思是,先调用main再调用f

切换栈帧: f 编号用于在不同的调用堆栈层级之间切换,查看对应层级的局部变量和代码上下文。

eg:f 1 (切换到编号为1的栈帧);f 0 (切回栈顶)

查看寄存器的值: i r

文本用户界面: layout split用于同时显示 源代码汇编代码

快捷键:

Ctrl + X,然后按 A 退出/进入 TUI 模式

Ctrl + X,然后按 O 切换焦点,用于代码窗口命令窗口

Ctrl + L 刷新屏幕,解决花屏问题

查看内存: x /<n><f><u> <address>

  • n: 显示几个单元
  • f: 显示格式 (x=十六进制, d=十进制, c=字符, i=汇编指令)
  • u: 单元大小 (b=byte, h=halfword/2bytes, w=word/4bytes, g=giant/8bytes)

自动显示变量: display 变量名

设置之后,在每次程序暂停时,GDB会自动打印这个变量的值

取消自动显示变量: undisplay 编号

相关推荐
不会编程的懒洋洋3 分钟前
VisionPro 中 几何相交工具 Geometry-Intersection
图像处理·笔记·c#·视觉检测·机器视觉·visionpro
r-t-H5 分钟前
从零开始搭建CDH-第十二章
linux·hive·spark·centos·hbase
_李小白7 分钟前
【C++学习笔记】新特性之inline变量
c++·笔记·学习
心中有国也有家9 分钟前
hccl 架构拆解:昇腾集合通信库到底在做什么?
人工智能·经验分享·笔记·分布式·算法·架构
~黄夫人~17 分钟前
零基础速通|Windows&Linux 常用命令行对照表大全
linux·运维·windows·笔记·备忘录·整理表格
benjiangliu20 分钟前
LINUX系统-17-EXT系列文件系统(二)
linux·运维·服务器
杨云龙UP21 分钟前
Linux 根分区被日志吃满?一次 58G Broker 日志清理实战_2026-05-20
linux·运维·服务器·数据库·hdfs·apache
叶半欲缺1 小时前
Linux通过lvm扩容根目录
linux·运维·服务器
码完就睡1 小时前
C语言——动态内存
c语言·开发语言
utf8mb4安全女神2 小时前
Linux网络服务
linux·运维·服务器