linux - 跨gdb : fix a mismatch between libthread_db and libpthread

标签 linux debugging gdb remote-debugging

我有一个配置了 --host=i686-pc-linux-gnu --target=powerpc-e300c3-linux-gnu 的跨 gdb。我可以使用 gdbserver 正确调试远程板上的应用程序,但收到有关 libthread_dblibpthread 之间版本不匹配的错误,因此我可以'无法正确调试线程(gdb 只能识别一个线程而不是三个线程)。也许是由于 libc 版本不同所致:在主机上我有 libc2.15 ,在目标机器上有 lib2.5 。我尝试为主机重新构建 libc2.5 以便将 gdb 链接到它,但这真是太糟糕了。在我疯狂地重建它之前,有人可以确认这是一个 libc 问题吗?

最佳答案

I tried to rebuid libc2.5 for host in order to link gdb against to it

这不是您需要的。

您需要的是 gdb 查找并加载与您的目标 libpthread.so.0 匹配的 libthread_db.so.1

为此,您需要

  1. 为主机构建 libc-2.5,并且
  2. 设置 GDB 的 libthread-db-search-path,以便找到在步骤 1 中构建的 libthread_db.so.1

您实际上不需要在步骤 1 中构建整个 libc。类似这样的内容就足够了:

mkdir build && cd build
../configure --prefix=/usr
make -C ../nptl_db objdir=`pwd`

更新:

i have GDB 6.6 and there isn't libthread-db-search-path. What is another way to specify that path?

GDB 只会dlopen("libthread_db.so.1", ...)。因此,为了使其找到正确的libthread_db.so.1,您需要调整LD_LIBRARY_PATH。使用bash:

LD_LIBRARY_PATH=/tmp/glibc-2.5/build/nptl_db gdb /path/to/target/a.out

关于linux - 跨gdb : fix a mismatch between libthread_db and libpthread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11016598/

相关文章:

ios - gdb 无法在 iphone 5.1.1 上加载共享库

c - sprintf/printf/fprintf - 用于识别格式说明符与多个 src 文件中的参数计数不匹配的工具

debugging - 编写Kotlin代码时无法在IntelliJ IDEA中停止

c++ - 等待调试器崩溃?

linux - Bash - 命令和变量扩展

java - Solaris 上的 OptaPlanner 比 Linux 操作系统上慢 5 倍

c++ - 如何找出我的 .exe 的入口函数?

c++ - Eclipse GDB 找不到源文件

linux - 如何将 tcptrack 的输出保存到文本文件中

python - pip 安装报告实验室错误 : command 'x86_64-linux-gnu-gcc' failed with exit status 1