Проблема с <оптимизацией> отладочной библиотеки GDB - PullRequest
2 голосов
/ 21 февраля 2012

Я пытаюсь использовать gdb для отладки общей библиотеки

при входе в функцию в общей библиотеке я начал получать <optimized out> для всех локальных переменных (написано на C)

Я попытался создать ссылку на разделяемую библиотеку (.so) и статическую библиотеку (.a), убедившись, что в файлах Makefile не задана оптимизация, т.е. -O0 и -g установлены как для библиотеки, так и для библиотеки. жгут

Странная вещь, которую я смог отладить ранее, <optimized out> появилась только недавно, но я понятия не имею, почему, например, Я был в состоянии увидеть локальную переменную изначально

Я знаю, что это расплывчатый вопрос, и для его сортировки может потребоваться всякая дополнительная информация, например. Makefiles, исходный код и т. Д., Но, возможно, кто-то распознает проблему по этому высокоуровневому описанию и может предложить потенциальное решение?

1 Ответ

4 голосов
/ 21 февраля 2012

появился только недавно, но я не знаю, почему

<optimized out> может появиться только при отладке оптимизированного кода.

Поскольку вы убедились, что в строках компиляции нет флагов -O* (не просто смотрите в Makefile, изучите фактический журнал компиляции), логический вывод заключается в том, что кто-то установил другую (оптимизированную) версию вашей библиотеки где-то еще в системе, и вы ссылаетесь на эту версию.

В Linux (и многих других системах UNIX) вы можете добавить флаг -Wl,-t к вашей строке ссылок и посмотреть, какая библиотека фактически используется во время ссылки.

При использовании разделяемой библиотеки команда GDB info shared сообщит вам, какая библиотека выбрана во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...