28

A shared object was built on RedHat Linux and while all the code was compiled with debug, the debugger (gdb) refused to load the symbols and issued an error as in:

...
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]

With this error, I could not get break points to trigger in any function nor see proper stack trace. I recompiled the entire project but nothing helped. I do know that some time in the past there was no problem in debugging that module.

What is causing this problem?

Good Person
  • 1,437
  • 2
  • 23
  • 42
Dror Harari
  • 3,076
  • 2
  • 27
  • 25

3 Answers3

18

The problem is that your version of gdb doesn't support the DWARF version used in one of your binaries.

The solution: Update gdb or compile your files using another debug format (DWARF2 works on gdb 6).

I have recently had this problem with freeBSD and nasm, nasm compiling binaries with DWARF3 and the gdb that ships with freeBSD 9.1 doesn't accept it.

I hope this answer helps anyone having a similar problem :P

Debug options for GCC

Marco
  • 2,796
  • 19
  • 24
  • Some software brings it's modified version of gdb, and after you added it into PATH env, your system default gdb is hidden. – hailinzeng Nov 23 '15 at 09:12
17

As it happens, the module that could not debug was mostly built from sources except for one little 'external' object file someextcode.o that was provided by a 3rd party.

In investigating the problem it was found that the someextcode.c was compiled with the -g3 flag which, apparently, places DWARF version of 4 in the compilation unit header. Changing that to -g resolved the problem.

Unfortunately, it appears a problem with a single module can break the debug-ability of an entire shared object (.so) without giving a clear indication of root of the problem.

Dror Harari
  • 3,076
  • 2
  • 27
  • 25
2

My issue got resolved by choosing the right gdb version for debugging. Earlier I was using the gdb 7.0... and when I started using the gdb version 7.10, i was able to debug my application.