Как я предварительно ожидаю каталог путь к библиотеке при загрузке базового файла в gdb на Linux

25
задан ks1322 10 March 2018 в 15:28
поделиться

4 ответа

Запустите gdb, не определяя исполняемый или базовый файл, затем введите следующие команды:

set solib-absolute-prefix ./usr
file path/to/executable
core-file path/to/corefile

необходимо будет удостовериться, что зеркально отразили путь к библиотеке точно от целевой системы. Вышеупомянутое предназначено для целевых объектов отладки, которые не соответствуют Вашему хосту, именно поэтому важно копировать Вашу корневую структуру файловой системы, содержащую Ваши библиотеки.

, Если Вы - удаленная отладка сервера, который является той же архитектурой и версией Linux/glibc как Ваш хост, тогда можно сделать как предложенный fd:

set solib-search-path <path>

, При попытке переопределить некоторые библиотеки, но не все тогда, что можно скопировать целевую структуру каталогов библиотеки во временное место и использовать solib-absolute-prefix решение, описанное выше.

44
ответ дан Community 28 November 2019 в 20:43
поделиться

Я не уверен, что это возможно вообще в gdb, но тогда я не эксперт.

Однако я могу прокомментировать Linux динамический компоновщик. Следующее должно распечатать путь всех разрешенных общих библиотек и неразрешенных.

ldd path/to/executable

Мы должны знать, как Ваши общие библиотеки были связаны с Вашим исполняемым файлом. Чтобы сделать это, используйте следующую команду:

readelf -d path/to/executable | grep RPATH
  • Должен команда ничего не печатать, динамический компоновщик будет использовать стандартные местоположения плюс переменная среды LD_LIBRARY_PATH для нахождения общих библиотек.

  • , Если команда печатает некоторые строки, динамический компоновщик будет игнорировать LD_LIBRARY_PATH и использовать hardcoded rpaths вместо этого.

    , Если перечисленные rpaths являются абсолютными, единственное решение, я знаю, должен скопировать (или символьная ссылка) Ваши библиотеки к перечисленным местоположениям.

    , Если перечисленные rpaths относительны, они будут содержать $ORIGIN, который будет заменен во время выполнения путем исполняемого файла. Переместите или исполняемый файл или библиотеки для соответствия.

Для дальнейшей информации, Вы могли запустить с:

man ld.so
4
ответ дан bltxd 28 November 2019 в 20:43
поделиться

Я нашел эту выборку на developer.apple.com

set solib-search-path path

, Если эта переменная установлена, путь является разделенным от двоеточия списком каталогов для поиска общих библиотек. solib-search-path' is used after solib-absolute-prefix' не удается определить местоположение библиотеки, или если путь к библиотеке относителен вместо абсолюта. Если Вы хотите использовать solib-search-path' instead of solib-absolute-prefix', несомненно, установят 'solib-absolute-prefix' на несуществующий каталог, чтобы препятствовать тому, чтобы GDB нашел библиотеки Вашего хоста.

РЕДАКТИРОВАНИЕ:

я не думаю с помощью вышеупомянутой установки, предварительно ожидает каталоги, которые я добавил, но это, действительно кажется, добавляет их, таким образом, файлы, отсутствующие в моей существующей системе, взяты в путях, я добавил. Я предполагаю установку solib-absolute-prefix к чему-то поддельные и добавляющие каталоги в solib-пути-поиска в порядке, в котором я нуждаюсь, могло бы быть полное решение.

3
ответ дан Mike Tunnicliffe 28 November 2019 в 20:43
поделиться

Одно важное замечание:

если вы выполняете кросс-компиляцию и пытаетесь отладить с помощью gdb, тогда после того, как вы сделали
файл ECECUTABLE_NAME , если вы видите что-л. например:

Using host libthread_db library "/lib/libthread_db.so.1"

, затем проверьте, есть ли у вас libthread_db для вашей целевой системы. Я нашел много похожих проблем в сети. Такая проблема не может быть решена с помощью "set solib-", вам также необходимо собрать libthread_db с помощью вашего кросс-компилятора.

0
ответ дан 28 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: