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

问题描述 投票:0回答:3

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

警告:无法找到与inferior线程库匹配的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

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

multithreading debugging gdb beagleboard angstrom-linux
3个回答
8
投票
警告:无法找到与下级线程库匹配的 libthread_db

这意味着您的

/lib/libthread_db.so.1

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

您应该

忽略/lib/.debug/*

——那不是
您正在寻找的图书馆。


6
投票

set libthread-db-search-path [path]

但是,您似乎仍然没有将其指向与您正在使用的 pthreads 库兼容的 libthread_db 版本。

首先,使用 ldd 检查您链接到哪个 pthread 库:

ldd your_executable

然后确保 libthread-db-search-path 指向的位置具有与您获得的任何 libpthread 兼容的 libthread_db 版本。可能是您的动态链接器路径获取的 pthread 库与您预期的不同。


0
投票
docker 容器

中运行进程,请也在 容器中恢复您的 coredump! 我在这里添加我的案例和解决方案,这可能会对某人有所帮助。

该进程被部署在 docker 容器中运行,然后我用

kill -3

将其崩溃。将会根据我的设置生成压缩的 coredump 文件。

当从我的

Host OS

解压coredump文件时,docker中的GDB会给出警告:

warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.

GDB 无法显示任何有用的信息。

当从

container

解压 coredump 文件时,上述警告将被修复:

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

GDB 可以成功显示堆栈跟踪等调试信息。

© www.soinside.com 2019 - 2024. All rights reserved.