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 还有很多的调试方法,待后续使用过程中,一一补充。

相关推荐
KL's pig/猪头/爱心/猪头5 小时前
写一个rv1106的gpio输入驱动(带中断)
linux·驱动开发·rv1106
lingran__5 小时前
C语言动态内存管理详解
c语言·开发语言
Calebbbbb5 小时前
Windows 向 Vmware Ubuntu 传大文件校验不一致问题完整排查记录
linux·windows·ubuntu
被遗忘的旋律.5 小时前
Linux驱动开发笔记(二十四)——(下)IIO + MPU6050驱动
linux·驱动开发·笔记
optimistic_chen5 小时前
【Redis系列】Redis缓存
linux·数据库·redis·mysql·缓存·火山引擎
我想发发发5 小时前
.deb格式软件包安装方式(Ubuntu 22.04为例)
linux·运维·ubuntu
cyber_两只龙宝5 小时前
LVS-NAT模式实验配置以及详解
linux·运维·云原生·lvs
海涛高软5 小时前
vmware虚拟机 ubuntu20.4手动设置静态IP
linux·运维·服务器
学嵌入式的小杨同学6 小时前
【嵌入式 C 语言实战】栈、队列、二叉树核心解析:存储原理 + 应用场景 + 实现思路
linux·c语言·网络·数据结构·数据库·后端·spring