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

相关推荐
SuperByteMaster4 分钟前
timer.c 介绍
c语言
青山是哪个青山1 小时前
LangChain 学习笔记(三):LangSmith 调试与监控
笔记·学习·langchain
Dr.kangder1 小时前
嵌入式面试总结(十五)——异常处理
单片机·面试·职场和发展·系统架构·嵌入式
酸菜。2 小时前
dw_axi_dmac总结
linux
神奇霸王龙2 小时前
Agent 准入门控屠夫:5 旗舰 4 维度评估
linux·运维·数据库·ai·ai作画·agent·ai编程
qq_448011162 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
蒸蒸yyyyzwd3 小时前
cpp选手备战后端学习笔记day6 秋招笔试题
笔记·学习
小绫网络安全4 小时前
Kali Linux渗透测试入门教程:从零搭建到实战攻防
linux·运维·服务器
西安景驰电子5 小时前
《PTP精确时间协议系列》第一篇:从原理到应用,全面解读IEEE 1588
linux·运维·服务器·开发语言·网络·windows·php
luj_17685 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法