Общий объект GDB не может получить символы в текущем контексте - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть часть программного обеспечения, которая скомпилирована с несколькими общими библиотеками.Мой код вызывает функцию внутри общего объекта и сбой внутри.Я считаю, что моя проблема в том, как строятся параметры для этой функции.Я хочу проверить это, просмотрев, что происходит внутри .so, так что я могу внести правильные изменения в то, как я строю параметры.

Проблема, с которой я сталкиваюсь, заключается в невозможности разрешить локальные переменные в общем объекте.Например, GDB выведет:

0x<addr> in <function>(int const* , int, int const*)

Исходя из этого, я знаю, где я нахожусь внутри .so.Когда я перехожу сюда и пытаюсь найти, какие разные переменные устанавливаются для gdb, жалуется на:

No symbol <var> in current context.

Теперь я точно знаю, где я нахожусь в коде.Кроме того, я проверил, чтобы .so был скомпилирован с символами, и я также убедился, что gdb загружает эти символы.

Может кто-нибудь сообщить мне, почему gdb не может видеть эти локальные переменные?

Как примечание - я давно не использовал gdb, и не до этого уровня отладки, поэтому заранее прошу прощения за то, что это всего лишь ограничение gdb, о котором я не знаю.

GDB Версия: 7.7.1

Редактировать для комментария:

Да. Так был скомпилирован с символами.Я проверил это с помощью:

file <.so>

Это говорит мне, что оно было динамически связано и не удалено.

Что касается команд, я просто пытаюсь напечатать переменные.

В целом, я не уверен, почему GDB не может разрешить исходную / точную функцию .so, когда я явно загрузил ее и убедился, что .so был скомпилирован с символами.

1 Ответ

0 голосов
/ 07 декабря 2018

Я проверил, чтобы .so был скомпилирован с символами на

Каждый .so скомпилирован с символами в- без символов было бы бесполезно.

Это информация отладки , без которой вы компилируете.Добавьте флаг -g к строкам компиляции и убедитесь, что в вашей строке ссылок нет -s или --strip.

, и я также убедился, что gdb загружает эти символы.

Да, этот вывод <function>(int const* , int, int const*) говорит нам, что GDB прочитал символов , а также что не загрузил информацию отладки (это два полностьюотдельные вещи).

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