gdb调试方法总结

背景

在c程序中,除了基本的print,我们最常用的工具就是gdb,它有众多的优点,它能够在程序运行时,打印变量信息,也可以在程序coredump之后,离线调试,可以说,它是排查问题的利器。

gdb基本功能

在函数处打断点,在文件的某一行打断点等等

(gdb) b main

gdb打印数组

在GDB 中执行以下 Python 脚本,这个我也是第一次使用,觉得还是有点惊讶它的调试能力的。

(gdb) python

for i in range(0, 2000):

val = gdb.parse_and_eval("array%d->timer_head" % i)

print("array%d = %s" % (i, val))

end

watch变量

watch 是 GDB 的 "监视点"(watchpoint) 功能,当某个变量的值被修改时,程序自动暂停,并打印旧值和新值。这比 break + print 更高效,尤其适合追踪"谁改了我的变量"。这个是内存被改,调试的神器。

(gdb) watch variable_name

定时采集变量信息

主要用于跑测试用例的时候,没办法watch变量的情况。

while true; do sudo gdb -p $PID -batch -ex 'print counter' -ex 'detach'; sleep 1; done

总结

gdb 还有很多的调试方法,待后续使用过程中,一一补充。

相关推荐
Navigator_Z6 小时前
LeetCode //C - 1200. Minimum Absolute Difference
c语言·算法·leetcode
雾时之林6 小时前
Linux----防火墙
linux·运维·网络
LuminousCPP6 小时前
数据结构基础篇(二):顺序表与链表全方位对比|从内存布局到 CPU 缓存理解底层差异
c语言·数据结构·经验分享·链表·缓存
我星期八休息8 小时前
网络编程—NAT、代理服务与内网穿透
linux·服务器·网络·网络协议
Hello_Damon_Nikola8 小时前
CH573从入门到精通
c语言·开发语言·单片机·嵌入式硬件
RisunJan8 小时前
Linux命令-sysctl(运行时修改内核参数)
linux·网络·智能路由器
yunwei378 小时前
eBPF 教程:使用 fsession 追踪慢速 vfs_read 调用
linux·云原生
A_humble_scholar8 小时前
Linux 网络基础(三)下的 HTTP 核心详解:从请求响应到状态管
linux·网络·http
Albart5758 小时前
Docker Desktop最新版安装踩坑全记录(Windows_Mac_Linux)【2026 4.74.0 终版】
linux·windows·macos·docker·环境搭建·踩坑记录
Chen—LSN9 小时前
C语言——数据在内存中的存储
c语言·开发语言·经验分享·笔记