【实用】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 编号

相关推荐
↘"LYong8 分钟前
Centos升级Redis(7.4.1 ---> 7.4.6)
linux·redis
bedynamic8 分钟前
Ubuntu虚拟机磁盘空间不足解决方案
linux·ubuntu
He BianGu12 分钟前
【笔记】DebuggerDisplay、DebuggerBrowsable 及其相关“系列”特性的系统性说明
笔记·c#
其美杰布-富贵-李12 分钟前
OpenCalphad 学习笔记
笔记·学习·热力学计算
我不是稻草人12 分钟前
Centos共享Mac文件
linux·macos·centos
hkNaruto13 分钟前
【AI】AI学习笔记:直接使用Python+BM25算法实现RAG的可行性以及实用价值
人工智能·笔记·学习
超级无敌大学霸17 分钟前
c语言整型提升
c语言·开发语言
Lv117700821 分钟前
WinForm常用控件功能介绍及使用模板
笔记·c#·visual studio·winform
week_泽30 分钟前
第7课:管理长期记忆的关键架构决策 - 学习笔记_7
java·笔记·学习·ai agent
koo36431 分钟前
pytorch深度学习笔记15
pytorch·笔记·深度学习