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

Sam*_*uel 13 debugging multithreading 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.

Emp*_*ian 8

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

这意味着您的/lib/libthread_db.so.1不符合您的要求/lib/libpthread.so.0.这种不匹配可能是你安装不同版本的结果libclibthread_db包,或更新一个或包管理系统的其他外部.它也可能是您的包中的错误(即它们可能无法正确构建).

你应该忽略 /lib/.debug/* - 这不是你要找的库.


Ton*_* K. 5

你试图使用是正确的

set libthread-db-search-path [path]
Run Code Online (Sandbox Code Playgroud)

但是,您似乎还没有将它指向与您正在使用的pthreads库兼容的libthread_db版本.

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

ldd your_executable
Run Code Online (Sandbox Code Playgroud)

然后确保libthread-db-search-path指向一个具有兼容版本的libthread_db的位置,以及你得到的任何libpthread.可能是您的动态链接器路径正在获得与您预期不同的pthread库.