Gdb 矮人错误:编译单元头中的版本错误(是4,应该是2)

Gdb 矮人错误:编译单元头中的版本错误(是4,应该是2),gdb,dwarf,Gdb,Dwarf,共享对象是在RedHat Linux上构建的,虽然所有代码都是通过调试编译的,但调试器(gdb)拒绝加载符号并发出错误,如所示: ... GNU gdb Fedora (6.8-37.el5) ... This GDB was configured as "x86_64-redhat-linux-gnu"... Dwarf Error: wrong version in compilation unit header (is 4, should be 2) [in module libgr

共享对象是在RedHat Linux上构建的,虽然所有代码都是通过调试编译的,但调试器(gdb)拒绝加载符号并发出错误,如所示:

...
GNU gdb   Fedora (6.8-37.el5) 
...
This GDB was configured as "x86_64-redhat-linux-gnu"...
Dwarf Error: wrong version in compilation unit header (is 4, should be 2) [in module libgrokf.so]
由于这个错误,我无法在任何函数中获得要触发的断点,也无法看到正确的堆栈跟踪。我重新编译了整个项目,但没有任何帮助。我确实知道,在过去的某个时候,调试该模块没有问题


是什么导致了这个问题?

事实上,无法调试的模块主要是从源代码构建的,只有一个由第三方提供的小“外部”对象文件somextcode.o除外

在调查该问题时,发现somextcode.c是使用-g3标志编译的,显然,它将矮人版本4放在编译单元头中。将其更改为-g解决了问题


不幸的是,单个模块出现问题可能会破坏整个共享对象(.so)的调试能力,而不会明确指出问题的根源。

问题在于您的
gdb
版本不支持某个二进制文件中使用的
DWARF
版本

解决方案:更新
gdb
或使用另一种调试格式编译文件(
DWARF2
gdb
6上工作)

我最近在
freeBSD
nasm
上遇到了这个问题,
nasm
DWARF3
编译二进制文件,
freeBSD 9.1
附带的
gdb
不接受它

我希望这个答案能帮助任何有类似问题的人:p


通过选择正确的gdb版本进行调试,我的问题得到了解决。之前我用的是GDB7.0。。。当我开始使用gdb版本7.10时,我能够调试我的应用程序。

一些软件带来了它的gdb修改版本,在您将其添加到PATH env后,您的系统默认gdb被隐藏。