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

相关推荐
orion571 天前
Missing Semester Class1:course overview and introduction of shell
linux
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
用户120487221611 天前
Linux驱动编译与加载
linux·嵌入式
用户805533698032 天前
Input 子系统架构:Core、Handler、Driver 三层是怎么协作的
linux·嵌入式
用户805533698032 天前
RK-Forge外设系列开篇 - 把板子从「能启动」变成「能用」:Ethernet/SPI/MMC 三个纯接线外设
linux·github·嵌入式
七歌杜金房2 天前
我终于又有了自己的 Linux 电脑
linux·debian·mac
tntxia3 天前
linux curl命令详解_curl详解
linux
扛枪的书生3 天前
Linux 网络管理器用法速查
linux
顺风尿一寸3 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode4 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行