Заставить GDB использовать предоставленный поток lib - PullRequest
2 голосов
/ 25 апреля 2019

У меня есть встроенное приложение ARM, которое связано со всеми демонтированными библиотеками, включая libpthread.so.Иногда приложение застревает в какой-то части кода, и я хочу иметь возможность подключиться к нему с помощью gdb и посмотреть, что происходит.Проблема в том, что GDB отказывается загружать необходимую библиотеку поддержки потоков, со следующими сообщениями:

Trying host libthread_db library: /home/me/debug_libs/libthread_db.so.1.
td_ta_new failed: application not linked with libthread
thread_db_load_search returning 0
warning: Unable to find libthread_db matching inferior's thread 
library, thread debugging will not be available.

Из-за этого я не могу отладить приложение, например, я не вижу текущие стеки вызовов для всех потоков.После некоторого расследования я подозреваю, что сбой td_ta_new с application not linked with libthread вызван урезанной версией libpthread, в которой отсутствует символ nptl_version.Есть ли способ обойти ошибку?GDB скомпилирован для ARM и запускается на самом устройстве.У меня есть свободные версии библиотек, но приложение уже работает с удаленными библиотеками.

1 Ответ

1 голос
/ 25 апреля 2019

Есть ли способ обойти ошибку?

Несколько способов, которые приходят на ум:

  1. Используйте add-symbol-file, чтобы переопределить раздетый libpthread.so.0 с неснятым:

    (gdb) info shared libpthread.so # shows the path and memory address where stripped libpthread.so.0 is loaded (gdb) add-symbol-file /path/to/unstripped/libpthread.so.0 $address # should override with new symbols, and attempt to re-load libthread_db.so.1

  2. Выполнить gdb -ex 'set sysroot /path/to/unstripped' ..., где /path/to/unstripped - это путь, который отражает установленное дерево (то есть, если вы используете /lib/libpthread.so.0, должно быть /path/to/unstripped/lib/libpthread.so.0.

    Я не проверял это, но я считаю, что это должно работать.

  3. Вы можете закомментировать проверку версии в GDB и перестроить ее.

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