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

15

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

警告:无法找到与下位机的线程库匹配的libthread_db,线程调试将不可用。

我仍然可以进行调试,但只能调试主线程。我已经阅读了一些论坛,建议安装 libthread-db1 和 glibc-dbg 软件包,但这对我来说没有解决问题。

在我的机器上,有三个文件: /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

有什么建议吗? 我正在使用 BeagleBoard-xm 的 Angstrom Linux v2.6.39。


请注意,我从2.6.32内核的根文件系统(Angstrom-Beagleboard-demo-image-glibc-ipk-2011.1-beagleboard.rootfs.tar.bz2)开始,并将Linux源代码复制到/usr/src中,然后基于2.6.39进行交叉编译了一个新内核。这很可能是版本不匹配的原因。我有来自交叉编译器的线程共享对象文件,并尝试用交叉编译器中的文件替换现有的.so文件,但导致make崩溃。有什么想法吗? - Samuel
1
嗨,我目前在Beaglebone上运行Angstrom时遇到了完全相同的问题。你最终找到解决方案了吗? - Brandon Yates
1
此外,请确保您的 libpthread 版本 未被剥离 - Pavel Krasavin
2个回答

8
警告:无法找到与下级线程库匹配的libthread_db
这意味着您的/lib/libthread_db.so.1与您的/lib/libpthread.so.0不匹配。这种不匹配可能是因为您安装了不同版本的libc和libthread_db包,或者在软件包管理系统之外更新了其中一个。这也可能是包中的错误(即它们可能构建不正确)。
您应该忽略/lib/.debug/*--那不是您要找的库。

6

您在尝试使用是正确的

set libthread-db-search-path [path]

然而,似乎您仍然没有将其指向与您正在使用的pthread库兼容的libthread_db版本。首先,使用ldd检查您链接到哪个pthread库:
ldd your_executable

那么请确保libthread-db-search-path指向一个与您获取的libpthread具有兼容版本的位置。可能是您的动态链接器路径获取了与您期望的不同的pthread库。


这是一个相当老的话题,但只是一个建议:您可以使用readelf而不是ldd - Mubin Icyer
“compatible version of libthread_db”这个怎么找到? - Ambareesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接