【问题标题】:cross-gdb: fix a mismatch between libthread_db and libpthreadcross-gdb:修复 libthread_db 和 libpthread 之间的不匹配
【发布时间】:2012-06-16 12:17:38
【问题描述】:

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

【问题讨论】:

    标签: linux debugging gdb remote-debugging


    【解决方案1】:

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

    这不是你需要的。

    您需要的是让 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`
    

    更新:

    我有 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
    

    【讨论】:

    • 谢谢。我会尽力做到这一点。但是我有 GDB 6.6 并且没有 libthread-db-search-path。指定该路径的另一种方法是什么?
    • libc 默认情况下不允许在 src 根目录中启动 configure 所以我有一个目录 build 并在其中启动 ../configure --prefix=/usrmake -C ../nptl_db 由于无法正常工作到 config.make 的路径...有什么想法吗?
    • @MirkoBanchi 我已经更新了你们两个 cmets 的答案。
    • 谢谢。但是现在我无法重建 ntpl_db
    • @MirkoBanchi 我见过的所有 GDB 版本都没有这样做。您还可以通过在调用之前设置 LD_DEBUG=libs 来查看 GDB 正在做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2011-05-13
    • 2021-11-01
    • 2015-10-16
    相关资源
    最近更新 更多