multithreading - GDB 看不到任何线程除了

标签 multithreading gdb

除了发生崩溃的线程之外,GDB 看不到任何线程;或者当我设置断点时 SIGTRAP 会杀死我的程序。

最佳答案

这在 Linux 上经常发生,尤其是在嵌入式目标上。有两个常见的原因:

  • 您正在使用 glibc,并且您已剥离 libpthread.so.0
  • libpthread.so.0 之间的不匹配和 libthread_db.so.1

  • GDB 本身不知道如何解码由 glibc 维护的“线程控制 block ”,并被认为是 glibc 私有(private)实现细节。它使用 libthread_db.so.1 (glibc 的一部分)来帮助它这样做。因此,libthread_db.so.1libpthread.so.0版本和编译标志必须匹配。此外,libthread_db.so.1要求在 libpthread.so.0 中存在某些非全局符号.

    解决方法:使用strip --strip-debug libpthread.so.0而不是 strip libpthread.so.0 .

    如果您在进行远程调试,请确保 libpthread.so.0在目标和libthread_db.so.1在主机匹配。

    关于multithreading - GDB 看不到任何线程除了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3376069/

    相关文章:

    c - 使用 gdb 调试正在运行的守护进程

    c++ - boost 、互斥概念

    multithreading - "Spawn a thread"类似 node.js 中的行为

    c++ - 改进 InterlockedCompareExchange() 的原子读取

    linux - 这个警告是什么意思?

    GDB 设置替代路径不起作用

    c++ - std::condition_variable 仅在调试时有效?

    c# - HttpWebRequest 的并发限制

    python - 不同线程的输出分离

    c - 我的链接寄存器出错了吗?