无法使用gdb调试多线程应用程序

时间:2012-07-20 19:02:43

标签: multithreading debugging gdb beagleboard angstrom-linux

我正在使用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。

2 个答案:

答案 0 :(得分:8)

  

警告:找不到匹配劣质线程库的libthread_db

这意味着您的/lib/libthread_db.so.1与您的/lib/libpthread.so.0不符。这种不匹配可能是因为您安装了不同版本的libclibthread_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库。