Невозможно отладить многопоточное приложение с помощью 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.
Ответы
Ответ 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, чем вы ожидаете.