Отсутствуют номера строк в отладочных символах для библиотеки во всей программе, но не отдельно

Я вижу странную проблему при попытке использовать gdb для отладки тестовой программы для пакет, созданный с помощью libtool. Если я запустил libtool --mode = execute gdb .libs / libfoo.so и попрошу его указать источник некоторой функции list Bar :: Baz , я получу исходный код как ожидается. Если я запускаю libtool --mode = execute gdb binary , я могу разбить Bar :: Baz () и увидеть его аргументы в трассировке стека, но я не получу исходный файл или номера строк, например:

#7  0x018348e5 in Bar::Baz(Qux*, Quux*) () from /path/to/libfoo.so
                           ^^^^^^^^^^^ <--- debug symbols are present!

Точно так же, если я попытаюсь перечислить Bar :: Baz при отладке исполняемого файла, я получу

No line number known for 'Bar::Baz'.

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

Когда я говорю источники информации , я получаю полный список файлов, из которых построена библиотека, с правильными абсолютными путями. Когда я говорю информация предоставлена ​​, я получаю правильный путь к объектному файлу с Да в столбце Syms .

Любые дальнейшие идеи, какие может пойти не так, и как это исправить?


Редактировать 1: Случайно я запустил objdump -g в вызывающей ошибку библиотеке и получил следующий результат:

/path/to/foo.so.0.0.0: file format elf32-i386
objdump: /path/to/foo.so.0.0.0: no recognized debugging information

Это удивительно, поскольку objdump -h (то, что я пытался запустить) перечисляет несколько разделов .debug _ * . В руководстве objdump также предлагается readelf -w , и это, похоже, выводит огромную кучу информации. Однако мне нужно посмотреть, что он на самом деле предоставляет.


Edit 2: Итак, readelf -w произвел некоторое понимание. По какой-то причине общий объектный файл, похоже, не содержит отладочной информации от подавляющего большинства любых объектов, связанных с ним. Основываясь на файлах Makefile, возможно, что команда, которая фактически собирает объекты в общую библиотеку, не передана -g , и эта информация не распространяется должным образом. Забавно то, что это работает (содержит полную информацию об отладке) во всех других наших конфигурациях, включая ту же версию компилятора на x86_64 (по сравнению с нынешней x86).


Редактировать 3: Фактически прошел полную перестройку с измененным Makefile с -g добавлен в LDFLAGS, и это не имело никакого значения. Теперь я здоров и по-настоящему сбит с толку.

5
задан Phil Miller 23 July 2011 в 06:42
поделиться