开发工具——gdb
1. 启动gdb
1.1 vim 使用gdb
需要vim8+ gdb7+
vi main.c
:packadd termdebug
:Termdebug ./a.out
2. 设置断点
break function
break linenum
break filename:function
break filename:linenum
break [args] if [cond]
当 运算式 cond 为真,设置断点, args 为上面任意一种。
tbreak [args]
只会生效一次的断点
rbreak regex
使用正则寻找可能的函数,并在其入口点设置断点,如 rbreak . 给每个函数设置断点。
info break
查看断点
3. 设置观察点
观察点用于查看变量有没有变化,若有变化,立即暂停程序。
watch expr
当变量expr 有变化,暂停程序
rwatch expr
当变量expr被读,暂停程序
awatch expr
当变量expr被读或被写,暂停程序
info watchpoints
查看所有观察点
4. 维护停止点
4.1 清除停止点
clear
清楚所有断点
clear function
clear linenum
clear filename:linenum
clear filename:function
清除指定断点
4.2 禁用断点
disable
禁用所有断点
disable 断点号
4.3 启用断点
enable
enable 断点号
4.3 修改条件断点
condition bnum expression
修改 断点号为num 的 停止条件为 expression
4.4 忽略断点
ignore bnum count
忽略断点几次
5. 程序运行控制
continue
继续执行到下一个断点
step
单步跟踪,若有函数,则进入函数
next
单步跟踪,但不进入函数
finish
运行程序,直到当前函数结束
until
执行一行程序,若此时程序在 for/while/do 循环最后一行,则一直执行到循环结束
6. 查看运行时的数据
6.1 变量
print var
查看变量的值
6.2 表达式
print expr
gdb支持根据 表达式计算变量,表达式为当前语言语法。
下面是扩展的操作符
- @ 数组相关
- :: 指定一个文件或一个函数的变量
- {} 表示一个指向内存地址为type类型的对象
6.3 数组
动态数组
若有如下数组定义
int *arr = (int *)malloc(len * sizeof(int));
gdb中查看数组
p *arr@len
静态数组
直接用 print 数组名
6.4 输出格式
支持的格式
x 16进制
d 10进制
u 16进制无符号
o 8进制
t 2进制
c 字符格式
f 浮点数格式
实例
使用16进制显示变量i
p/x i
使用浮点数格式显示i
p/f i
7. 自动显示
display expr
display/fmt expr
display/fmt addr
删除自动显示
undisplay dnum ..
disable/enable/delete display dnum ...
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
2020-03-08 UNP第11章——名字与地址转换