Я вижу странную проблему при попытке использовать 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, и это не имело никакого значения. Теперь я здоров и по-настоящему сбит с толку.