gdb 是 Linux 下的命令行调试器,查看变量值就是把程序停在某一行,让它把变量当前的值打印出来。
步骤很直接:编译时带上 -g 保留调试信息,用 gdb 加载程序,下断点,运行到断点,print 变量名。
先准备一个 demo.c,里面放个 int 变量 count 就行,然后:
# 必须带 -g,同时关掉优化,否则变量可能被优化没
gcc -g -O0 demo.c -o demo
gdb ./demo进入 gdb 后依次敲:
(gdb) break main # 在 main 开头下断点
(gdb) run # 运行到断点停下
(gdb) next # 单步走一行
(gdb) print count # 打印变量值
(gdb) print/x count # 按十六进制看
(gdb) display count # 每次停下来自动打印
(gdb) print *ptr # 指针要解引用才看得到指向的内容坑一:不加 -g 或开了优化,print 会报 No symbol 或 optimized out,这不是 gdb 坏了,是变量压根没被保留下来。坑二:print 只能看当前栈帧的局部变量,在别的函数里打印会失败,先用 bt 看调用栈,再用 frame N 切过去才能看到。