背景在c程序中除了基本的print我们最常用的工具就是gdb它有众多的优点它能够在程序运行时打印变量信息也可以在程序coredump之后离线调试可以说它是排查问题的利器。gdb基本功能在函数处打断点在文件的某一行打断点等等(gdb) b maingdb打印数组在GDB 中执行以下 Python 脚本这个我也是第一次使用觉得还是有点惊讶它的调试能力的。(gdb) pythonfor i in range(0, 2000):val gdb.parse_and_eval(“array[%d]-timer_head” % i)print(“array[%d] %s” % (i, val))endwatch变量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; doneGDB查看变量 name在结构体student中的偏移(gdb) p ((struct student *)0)-name原理将空指针 (struct student *)0 强转后取成员地址得到的就是该成员相对于结构体起始地址的偏移因为基地址是 0.总结gdb 还有很多的调试方法待后续使用过程中一一补充。