Я пытаюсь проанализировать, почему (довольно большая) программа segfaults. Если программа сработает, она записывает основной дамп в/tmp, который я пытаюсь проанализировать с помощью gdb. Однако, GDB дает мне следующую ошибку:Как изменить версию компиляции?
Reading symbols from /home/user/Executable...Dwarf Error:
wrong version in compilation unit header (is 4, should be 2)
[in module /home/user/Executable]
Я искал немного, и нашел thread на StackOverflow, где автор предполагает, что это результат компиляции части кода (именно в библиотеке, он/она использовал) с другим флагом -g
.
Я проверил версию модуля компиляции на мой исполняемый файл (C++) и библиотеки (C) Я использую в моей программе через
readelf --debug-dump=info Executable | grep -A 2 'Compilation Unit @'
И по-видимому, исполняемый везде версию 4, в то время как библиотека имеет версию 2. Мне интересно, можно ли исправить это и как? Мне также очень любопытно, как эта проблема действительно поднялась в первую очередь (разыгрывание с уровнем отладки с помощью флага -g вообще не помогло).
ТИА
Какая у вас ОС, версия gcc и версия gdb? –
ОС - Debian 6.07, а gcc - в версии 4.8 (мне пришлось скомпилировать ее самостоятельно, так как я использую возможности C++ 11). Я использую версию gdb, поставляемую с Debian (это означает, что это gdb 7.0.1). – user1729210
Да, это и есть причина. Всегда используйте последнюю версию gdb. (Примите свой ответ, чтобы другие сразу увидели, что он сработал). –