Подтвердить что ты не робот

Ошибка гнома: неправильная версия в заголовке блока компиляции (4, должно быть 2)

Общий ресурс был создан на 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]

С этой ошибкой я не мог получить точки останова для запуска в любой функции и не видеть правильную трассировку стека. Я перекомпилировал весь проект, но ничего не помогло. Я знаю, что некоторое время в прошлом не возникало проблем при отладке этого модуля.

Что вызывает эту проблему?

4b9b3361

Ответ 1

Как это бывает, модуль, который не мог отлаживать, в основном строился из источников, за исключением одного небольшого "внешнего" объектного файла someextcode.o, который был предоставлен третьей стороной.

При исследовании проблемы было обнаружено, что файл someextcode.c был скомпилирован с флагом -g3, который, по-видимому, помещает DWARF версию 4 в заголовок блока компиляции. Изменение этого параметра на -g разрешило проблему.

К сожалению, проблема в том, что один модуль может нарушить способность отладки всего общего объекта (.so), не давая четкого указания на корень проблемы.

Ответ 2

Проблема в том, что ваша версия GDB не поддерживает версию DWARF, используемую в одном из ваших двоичных файлов.

Решение: обновите GDB или скомпилируйте свои файлы с использованием другого формата отладки (DWARF2 работает с GDB 6).

У меня недавно была эта проблема с freeBSD и nasm, nasm компиляции двоичных файлов с dwarf3 и gdb, который поставляется с FreeBSD 9.1, не принимает его.

Я надеюсь, что этот ответ поможет любому, у кого есть аналогичная проблема: P

Параметры отладки для GCC

Ответ 3

Моя проблема решена путем выбора правильной версии gdb для отладки. Раньше я использовал gdb 7.0... и когда я начал использовать gdb версию 7.10, я смог отладить мое приложение.