2012-07-20 68 views
13

我用GDB进行调试多线程应用程序,但调试多线程应用程序,当我在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。我尝试在名称libthread_db.so中创建/lib的符号链接,其中一次指向/lib/libthread_db.so.1文件,另一次指向/lib/libthread_db-1.0.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

任何建议?我使用Linux的埃为v2.6.39的的BeagleBoard-XM

+0

请注意,我从2.6.32内核(Angstrom-Beagleboard-demo-image-glibc-ipk-2011.1-beagleboard.rootfs.tar.bz2)开始使用根文件系统,并将linux源代码复制到/ usr/src,并交叉编译基于2.6.39的新内核。这可能是版本不匹配的原因。我有来自交叉编译器的线程共享目标文件,我尝试用交叉编译器替换现有的.so文件,但它导致崩溃。有任何想法吗? – Samuel 2012-07-23 15:00:33

+1

嗨我目前有一个问题在埃格尔运行在beaglebone上。你有没有想过解决方案? – 2013-06-19 23:30:09

+1

此外,请确保您的libpthread版本不是“未被删除” – 2016-07-04 08:22:54

回答

8

警告:无法找到匹配libthread_db所劣质的线程库

这意味着日在您的/lib/libthread_db.so.1与您的/lib/libpthread.so.0不符。这种不匹配可能是由于您安装了不同版本的libclibthread_db软件包,或者更新了软件包管理系统之外的一个或另一个软件包。它也可能是你的包中的错误(即它们可能没有被正确构建)。

你应该忽略/lib/.debug/* - 这是你正在寻找的图书馆。

5

您在尝试使用

set libthread-db-search-path [path] 

但是正确的,看来你仍然没有把它指向一个版本libthread_db所的是与你使用的并行线程库兼容。

首先,检查其并行线程库您连接到使用LDD:

ldd your_executable 

然后确保的libthread-DB-搜索路径指向具有libthread_db所兼容版本与任何的libpthread的位置你越来越。这可能是因为你的动态链接器路径获取的是不同于预期的pthread库。