GDB не ломается в динамически загруженном .so файле? - PullRequest
3 голосов
/ 02 августа 2011

В моей системе Linux я пишу программу, которая динамически загружает некоторые библиотеки .so при запуске. Это примерно так: исполняемая программа будет искать в определенном каталоге, когда она начнет работать, а затем загружать все файлы .so в этом каталоге. обратите внимание , что исполняемый файл и файл .so создаются независимо, а сборка исполняемого файла НЕ ссылается на файлы .so.

Моя проблема: после запуска программы (таким образом, все библиотеки .so были загружены) с подключенной GDB, Кажется, я могу установить точку останова для кода в файле .so (GDB подсказывает мне, что эта точка останова установлена ​​в общей библиотеке), , но эта точка останова никогда не прерывается.

Как мне заставить эти контрольные точки действительно работать? Во время сеанса отладки у меня есть весь исходный код, доступный в нужных местах, и опция -g включена. Я также убрал оптимизацию -O2 при компиляции.

Ответы [ 2 ]

5 голосов
/ 08 августа 2011

Убедитесь, что отладочная информация была правильно загружена для .so файла.Посмотрите на вывод команды (gdb) info sharedlibrary.Если ваша библиотека отображается со звездочкой (*) в таблице загруженных библиотек, тогда символы отладки не были загружены, и gdb не смог остановиться на точках останова в этом.

2 голосов
/ 02 августа 2011

Возможно, ваша функция никогда не вызывается. Поместите точку останова в точку входа вашей общей библиотеки (функция, которую ваша основная программа получает с dlsym). Я только что подтвердил, что мой gdb (7.1) останавливается на такой точке останова.

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

...