-->

侏儒错误:错误版本在编译单元报头(为4,应为2)(Dwarf Error: wrong versio

2019-07-30 15:04发布

共享对象是建立在红帽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]

有了这个错误,我不能让破发点中的任何功能,也不会触发正确看到堆栈跟踪。 我重新编译整个项目,但没有任何帮助。 我知道,一段时间过去有在调试模块没有问题。

是什么原因造成这个问题?

Answer 1:

碰巧,那不能调试大部分是从源代码构建的,除了一个小“外部”的目标文件,是由第三方提供someextcode.o模块。

在调查这个问题,发现该someextcode.c是与-g3标志,该标志,很显然,在编译单元头则以4矮版本编译。 改变这种以-g解决了这个问题。

不幸的是,它似乎与单个模块的问题可以打破整个共享对象(的.so)的调试能力,而不会给人问题的根源的清楚指示。



Answer 2:

问题是,你的版本gdb不支持DWARF在二进制文件中的一个使用的版本。

解决办法:更新gdb或编译使用其他调试格式(文件DWARF2工作在gdb 6)。

最近我有这个问题, freeBSDnasmnasm编译的二进制文件DWARF3gdb附带freeBSD 9.1不接受它。

我希望这个答案可以帮助有类似的问题的人:P

对于GCC调试选项



Answer 3:

我的问题得到了通过选择调试正确的GDB版本解决。 早些时候,我用的是GDB 7.0 ... ...当我开始使用gdb的版本7.10,我是能够调试我的应用程序。



文章来源: Dwarf Error: wrong version in compilation unit header (is 4, should be 2)
标签: gdb dwarf