GDB除此之外没有看到任何线程

car*_*ips 4 multithreading gdb

除了发生崩溃的线程之外,GDB没有看到任何线程; 或者,当我设置断点时,SIGTRAP会终止我的程序.

car*_*ips 6

这经常发生在Linux上,特别是在嵌入式目标上.有两个常见原因:

  • 你正在使用glibc,你已经剥离了 libpthread.so.0
  • libpthread.so.0和之间的不匹配libthread_db.so.1

GDB本身不知道如何解码由glibc维护的"线程控制块",并认为是glibc私有实现细节.它使用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主机上匹配.