Подтвердить что ты не робот

Невозможно отладить многопоточное приложение с помощью gdb

Я отлаживаю многопоточное приложение с gdb, но когда я запускаю программу в gdb, я получаю предупреждение:

warning: Невозможно найти библиотеку libthread_db, соответствующую библиотеке нижних потоков, отладка потоков будет недоступна.

Я все еще могу отлаживать, но я не могу отлаживать ничего, кроме основного потока. Я читал форумы, которые предлагают установить пакеты libthread-db1 и glibc-dbg, но это не исправляет проблему для меня.

На моей машине у меня есть 3 файла /lib/libthread_db.so.1, /lib/.debug/libthread_db-1.0.so и /lib/libthread_db-1.0.so. Я попытался создать символические ссылки в /lib с именем libthread_db.so, один раз указывая на файл /lib/libthread_db.so.1, а другое время указывая на файл /lib/libthread_db-1.0.so, а также создал символическую ссылку /lib/.debug/libthread_db.so, указывающую на /lib/.debug/libthread_db-1.0.so, все без везения.

В gdb я попытался установить libthread-db-search-path в /lib (с символической связью, когда-то установленной на libthread_db.so.1, и один раз на libthread_db-1.0.so, а также установить на /lib/.debug.

Любые предложения? Я использую Angstrom Linux v2.6.39 для BeagleBoard-xm.

4b9b3361

Ответ 1

предупреждение: невозможно найти libthread_db, соответствующую библиотеке нижних потоков

Это означает, что ваш /lib/libthread_db.so.1 не соответствует вашему /lib/libpthread.so.0. Такое несоответствие может быть результатом установки разных версий пакетов libc и libthread_db или обновления одного или другого вне системы управления пакетами. Это также может быть ошибкой в ​​ваших пакетах (т.е. Они могут быть неправильно построены).

Вы должны игнорировать /lib/.debug/* - это не библиотека, которую вы ищете.

Ответ 2

Вы правильно пытаетесь использовать

set libthread-db-search-path [path]

однако, похоже, вы все еще не указали его на версию libthread_db, которая совместима с используемой вами библиотекой pthreads.

Сначала проверьте, какую библиотеку pthread вы связали с использованием ldd:

ldd your_executable

то убедитесь, что путь libthread-db-search указывает на местоположение, у которого есть совместимая версия libthread_db с любым libpthread, который вы получаете. Возможно, что вы - динамический путь компоновщика, получаете другую библиотеку pthread, чем вы ожидаете.