Запустите 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
решение, описанное выше.
Я не уверен, что это возможно вообще в 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
Я нашел эту выборку на 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-пути-поиска в порядке, в котором я нуждаюсь, могло бы быть полное решение.
Одно важное замечание:
если вы выполняете кросс-компиляцию и пытаетесь отладить с помощью gdb, тогда
после того, как вы сделали файл ECECUTABLE_NAME
, если вы видите что-л. например:
Using host libthread_db library "/lib/libthread_db.so.1"
, затем проверьте, есть ли у вас libthread_db для вашей целевой системы. Я нашел много похожих проблем в сети. Такая проблема не может быть решена с помощью "set solib-", вам также необходимо собрать libthread_db с помощью вашего кросс-компилятора.