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

相关推荐
m0_485614672 小时前
Linux--Docker网络管理
linux·docker·eureka
石像鬼₧魂石3 小时前
HexStrike AI 理想操作流程清单(完整功能版)
linux·人工智能·windows·学习·ubuntu
Xの哲學3 小时前
Linux UPnP技术深度解析: 从设计哲学到实现细节
linux·服务器·网络·算法·边缘计算
柏木乃一3 小时前
进程(6)进程切换,Linux中的进程组织,Linux进程调度算法
linux·服务器·c++·算法·架构·操作系统
Jelly-小丑鱼3 小时前
Linux搭建SQLserver数据库和Orical数据库
linux·运维·数据库·sqlserver·oracal·docker容器数据库
CAU界编程小白3 小时前
Linux编程系列之权限理解和基础开发工具的使用(下)
linux
Run_Teenage3 小时前
Linux:进程等待
linux·运维·服务器
Trouvaille ~3 小时前
【Linux】从磁盘到文件系统:深入理解Ext2文件系统
linux·运维·网络·c++·磁盘·文件系统·inode
wdfk_prog3 小时前
[Linux]学习笔记系列 -- [fs]file
linux·笔记·学习