GDB的基本使用方法

本文详细介绍了GDB的基本使用方法,包括断点设置、条件断点、单步执行、反汇编、栈帧查看、显示变量、监视点以及启动调试等关键步骤,帮助开发者更好地进行程序调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GDB的基本使用方法(基础篇)

gdb调试流程

1.带调试选项编译,构建调试对象
2.启动调试器GDB
3.设置断点
4.显示栈帧
5.显示值
6.继续执行
断点

break <函数名、行号、文件名:函数名、文件名:行号、addr> (常用)
break +/-offset 当前暂停位置向后/前offset行
条件断点
b 断点 if 条件
condition 断点编号 删除断点设置的条件
condition 断点编号 条件 给指定的断点增加触发条件
反复执行
ignore 断点编号(断点 监视点 捕获点) 次数 continue + 次数 到达断点不暂停
continue step stepi next nexti
代码内部暂停
finish 执行完当前函数后暂停
until 执行循环的其余部分,出循环后暂停
删除断点和禁用断点
clear 函数名/行号
delete 断点编号
enable/disable 使能/禁用 所有断点
enable/disable 断点编号 …指定编号
enable/disable display 显示编号 禁用display命令定义的自动显示
enable/disable mem 内存区域 禁用mem定义的内存区域
enable once/delete 断点编号 启用断点后运行一次 禁用/删除

断点命令
    commands 断点编号 
        命令
        end
栈帧

栈帧
bt 查看当前栈帧(等同于info stack)
up / down 切换到 上/下一个栈帧
frame num 切换到num栈帧
info frame num 查看栈帧详细信息 i f 1(缩写)
gdb 查看进程的内存映射 i proc mappings GDB会打开 /proc//maps
如果分析内核转储 可用 info files info target

bt full (-)n 查看最近/(初)的几个栈帧 详细信息

显示

print命令可以显示变量 简写p
info registers可以显示寄存器 简写i r
在寄存器名称前添加$,即可显示各个寄存器的内容
显示时可使用以下格式
p/格式 变量
显示寄存器可使用的格式

格式说明
x十六进制数
d十进制数
u无符号十六进制数
t二进制数
a地址
c字符
f浮点数
s字符串
i机器语言(仅在显示内存的x命令中可用)
反汇编

disassemble 简写disas
格式
disassemble 反汇编当前函数
disassemble $rip 反汇编程序基数器所在函数
disassemble start_addr end_addr 反汇编一段地址内的代码

单步执行

next(n):执行源代码中下一行的命令;若遇到函数调用,想执行到函数内部,使用step(s)命令。
逐条执行汇编执行对应nexti和stepi

继续运行

continue 简写c
继续运行,遇到断点后暂停。
continue num:忽略num次断点

监视点

watch <表达式> 表达式为常量或变量,发生变化是暂停运行。
查看断点和监视点
info breakpoint 简写 i b
删除断点和监视点
delete num 删除编号为num的断点或监视点

启动调试

gdb file.name (file.name为编译附带调试信息的可执行程序)
gdb attach `pidof cmd` 挂到某个进程上进行调试
info proc可查看当前进程信息
若打算保存调试的日志信息
set logging file debug.logging //设置存储文件名
set logging overwrite //覆盖同名文件
set logging on //开始记录
set logging off //结束记录

介绍了GDB工具的基本用法,后续会针对一些常见Bug进行分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值