Dwarf Error: Can't read DWARF data from '/tmp/spyauth787438238

Dwarf Error: Can't read DWARF data from '/tmp/spyauth787438238

我正在尝试使用 GDB 调试 C++ 代码。我可以 运行 调试器,设置断点并且断点被正确击中。但是当我尝试在遇到断点时执行 'next' 命令时,它会抛出以下错误:

"Dwarf 错误:无法从'/tmp/spyauth787438238"

读取 DWARF 数据

我也观察到 'step' 命令可以正确执行,但是当我执行上面的下一个命令时会抛出错误。

我的 GDB 版本是 GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1,g++ 版本是 4.8.1。 非常感谢与此相关的任何帮助。

默认情况下,gcc 4.8.1 发出 DWARF4 调试信息。您必须至少使用 GDB 7.5 才能阅读它。因此,对于具有默认选项的 gcc 4.8.1,您的 gdb 太旧了。 您可以:

  • 将 gdb 升级到更新的版本
  • 使用 -gdwarf-2 gcc 密钥发出旧的 DWARF 调试信息格式

来自GCC 4.8 Release Notes

DWARF4 is now the default when generating DWARF debug information. When -g is used on a platform that uses DWARF debugging information, GCC will now default to -gdwarf-4 -fno-debug-types-section. GDB 7.5, Valgrind 3.8.0 and elfutils 0.154 debug information consumers support DWARF4 by default. Before GCC 4.8 the default version used was DWARF2. To make GCC 4.8 generate an older DWARF version use -g together with -gdwarf-2 or -gdwarf-3. The default for Darwin and VxWorks is still -gdwarf-2 -gstrict-dwarf.