我正在使用gdb调试多线程应用程序,但是当我在gdb中启动程序时,我收到警告:
警告:无法找到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。
答案 0 :(得分:8)
警告:找不到匹配劣质线程库的libthread_db
这意味着您的/lib/libthread_db.so.1
与您的/lib/libpthread.so.0
不符。这种不匹配可能是因为您安装了不同版本的libc
和libthread_db
软件包,或者更新了软件包管理系统之外的其中一个软件包。它也可能是您的包中的错误(即它们可能无法正确构建)。
你应该忽略 /lib/.debug/*
- 不你正在寻找的库。
答案 1 :(得分:5)
您尝试使用
是正确的set libthread-db-search-path [path]
但是,您似乎还没有将它指向与您正在使用的pthreads库兼容的libthread_db版本。
首先,使用ldd:
检查您链接到哪个pthread库ldd your_executable
然后确保libthread-db-search-path指向具有兼容版本的libthread_db的位置以及您正在获取的任何libpthread。可能是您的动态链接器路径正在获得与您预期不同的pthread库。