GDB调试警告

3
当我尝试通过Qt或从终端直接使用gdb调试我的核心转储时,它会给我很多警告,如下所示。因此,我的回溯没有正常工作。
警告:

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

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

警告:无法加载共享库符号 )。 您需要“set solib-search-path”或“set sysroot”吗?

这是因为我的可执行文件是在没有调试符号的情况下构建的,还是有关于glibc的问题?您有解决此问题的任何方案吗?

看起来gdb找不到所提到的库。如果它们是共享库,您可以检查环境变量中是否已设置搜索路径,以便它可以找到它们。当您创建终端会话时,它可能没有继承与运行时相同的环境。 - Jay
1个回答

9
这是因为您的可执行文件没有调试符号,还是与glibc有关的问题?
这与您的可执行文件无关。
GDB需要一个与您的libpthread.so.0匹配的libthread_db.so.1版本,并且找不到这样的版本。
可能的原因(从最可能到最不可能):
- 您已经剥离了libpthread.so.0(不要这样做)。 - 您升级了glibc,但升级不完整,未更新libthead_db.so.1。 - 您正在使用某种交叉编译环境,并且确实需要设置solib-search-path或set libthread-db-search-path,以便GDB可以找到匹配的libthread_db.so.1。
您可以使用set debug libthread-db 1来查看GDB尝试使用哪些版本的libthread_db。

1
关于不剥离libthread的信息帮助我们解决了使用gdb生成转储文件的问题,从而得到了仅包含一个线程的转储。 - HackerBaloo

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