Загрузка локальных общих библиотек в gdb

Я бы подумал, что этот вопрос уже задавали, но я не мог его найти. Потерпите меня, если это было.

Я пытаюсь модифицировать существующую программу в установке Debian.

Программа, назовем ее foo, при компиляции создает некоторые из своих собственных разделяемых библиотек. Я хотел бы отладить программу и войти в одну из локальных общих библиотек, назовите ее libbar.so.

Однако, поскольку это уже существующая программа, в ней уже есть файл /usr/lib/libbar.so, который я не хочу перезаписывать.

Итак, как заставить gdb использовать локальный libbar.so?


person Mouse.The.Lucky.Dog    schedule 18.07.2014    source источник


Ответы (1)


Программа, назовем ее foo, при компиляции создает некоторые из своих собственных разделяемых библиотек.

Вы имеете в виду, что программа во время выполнения записывает на диск свою собственную копию libbar.so?

Это очень необычно. Вероятно, вы имеете в виду, что при сборке программы также создается локальный libbar.so.

Я хотел бы отладить программу и войти в одну из локальных общих библиотек, назовите ее libbar.so.

Это уже должно происходить, если на самом деле программа загрузила локальный libbar.so.

Вероятно, когда вы запускаете программу, она загружает /usr/lib/libbar.so, а затем GDB использует то, что программа уже загрузила (вы можете увидеть, что GDB считает загруженным, используя команду info shared GDB).

Если вы хотите, чтобы ваша программа загружала локальную копию libbar.so, вам нужно настроить LD_LIBRARY_PATH или изменить DT_RPATH или DT_RUNPATH, встроенные в программу, используя -Wl,-rpath=/path/to/lib (где локальный libbar.so находится в /path/to/lib/libbar.so). Как только вы это сделаете, GDB автоматически подберет локальный файл libbar.so.

person Employed Russian    schedule 18.07.2014