cross-gdb:修复libthread_db和libpthread之间的不匹配

时间:2012-06-13 14:03:48

标签: linux debugging gdb remote-debugging

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

1 个答案:

答案 0 :(得分:1)

  

我尝试为主机重建libc2.5以便将gdb链接到它

这不是你需要的。

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

为此,你需要

  1. 为主机构建libc-2.5
  2. 设置GDB的libthread-db-search-path,以便找到步骤1中构建的libthread_db.so.1
  3. 您实际上并不需要在步骤1中构建整个libc。这样的事情就足够了:

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

    更新

      

    我有GDB 6.6并且没有libthread-db-search-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