用gdb打印变量时显示No symbol “*” in current context

问题:

用gdb调试时,打印变量的显示No symbol “*” in current context。

原因1:gcc和gdb的版本不匹配。

GCC4.8及其以上的版本默认使用-gdwarf-4 -fno-debug-types-section选项,也就是使用DWARF4调试信息格式。而这之前的版本只支持DWARF2或者DWARF3。GDB 7.5,Valgrind 3.8.0和elfutils 0.154这些版本及其以上版本的工具默认使用DWARF4调试信息格式。要确保可执行文件调试信息格式与调试工具所支持的是一致的。如果gdb的版本只支持DWARF2或者DWARF3,在使用gcc编译的时候可以使用-gdwarf-2或-gdwarf-3选项来指定调试信息格式,已和gdb保持一致。

解决1:编译程序时增加编译选项 -gdwarf-3

原因2:编译程序时没加-g或者是加了-O之后编译器优化掉了

解决2:编译程序时关闭编译优化。