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

Multithreading 无法使用gdb调试多线程应用程序,multithreading,debugging,gdb,beagleboard,angstrom-linux,Multithreading,Debugging,Gdb,Beagleboard,Angstrom Linux,我正在用gdb调试一个多线程应用程序,但当我在gdb中启动程序时,我收到警告: 警告:找不到与Subsier的线程库匹配的libthread_db,线程调试将不可用 我仍然可以调试,但是除了主线程之外,我不能调试任何东西。我读过一些论坛建议安装libthread-db1和glibc-dbg包,但这并不能解决我的问题 在我的机器上,我有3个文件/lib/libthread\u db.so.1,/lib/.debug/libthread\u db-1.0.so,和/lib/libthread\u d

我正在用gdb调试一个多线程应用程序,但当我在gdb中启动程序时,我收到警告:

警告:找不到与Subsier的线程库匹配的libthread_db,线程调试将不可用

我仍然可以调试,但是除了主线程之外,我不能调试任何东西。我读过一些论坛建议安装libthread-db1和glibc-dbg包,但这并不能解决我的问题

在我的机器上,我有3个文件
/lib/libthread\u db.so.1
/lib/.debug/libthread\u db-1.0.so
,和
/lib/libthread\u db-1.0.so
。我尝试在
/lib
中创建名为
libthread\u db.so
的符号链接,一次指向
/lib/libthread\u db.so.1
文件,另一次指向
/lib/libthread\u db-1.0.so
文件,而且我还创建了符号链接
/lib/.debug/libthread\u db.so
,指向
/lib/.debug/libthread\u db-1.0.so
,所有这些都没有运气

在gdb中,我尝试将
libthread db search path
设置为
/lib
(符号链接一次设置为
libthread\u db.so.1
,一次设置为
libthread\u db-1.0.so
,还设置为
/lib/.debug

有什么建议吗?我正在使用Angstrom Linux v2.6.39作为BeagleBoard xm

警告:找不到与服务器的线程库匹配的libthread_db

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


您应该忽略
/lib/.debug/*
——这不是您要查找的库。

您尝试使用的库是正确的

set libthread-db-search-path [path]
但是,您似乎还没有将它指向与您正在使用的pthreads库兼容的libthread_db版本

首先,检查使用ldd链接到的pthread库:

ldd your_executable

然后确保libthread数据库搜索路径指向一个位置,该位置的libthread_db版本与您获得的libpthread兼容。这可能是因为动态链接器路径获得的pthread库与您预期的不同。

注意,我是从2.6.32内核的根文件系统开始的(Angstrom-Beagleboard-demo-image-glibc-ipk-2011.1-Beagleboard.rootfs.tar.bz2),并将linux源代码复制到/usr/src中,并基于2.6.39交叉编译了一个新内核。这可能是版本不匹配的原因。我从交叉编译器中获得了线程共享对象文件,并尝试用交叉编译器中的文件替换现有的.so文件,但这导致make崩溃。有什么想法吗?嗨,我是最新的ly在beaglebone上运行angstrom时遇到了完全相同的问题。您找到解决方案了吗?另外,请确保您的libpthread版本是
而不是剥离的
这是一个非常古老的主题,但只是一个建议:您可以使用
readelf
而不是
ldd