我试图更深入地了解 GDB 如何了解线程。
- 它如何判断哪一个是当前线程?
- 它如何知道与每个线程相关的所有上下文信息?
我的问题是关于它如何在 GDB 内部工作,我在调试线程时没有任何问题,这完全是关于 GDB 的内部结构。
我找到了GDB 内部文档,但目前线程部分是空的。
我所有的其他研究都让我对调试多线程程序产生了疑问,我似乎无法挖掘出我正在寻找的确切信息。
编辑 :
到目前为止,GDB 似乎拦截了信号(感谢 ptrace?)并找出线程何时创建。但我想更准确地知道它实际上是如何完成的。
我还有一个特定的架构,它带有一个配置了 --enable-threads=single 的 GDB。然而,该 GDB 能够列出当前线程。这怎么可能 ?
欢迎任何知识、有用的链接或文档。
谢谢。
2014 年 3 月 5 日更新
我查看了 libthread_db 并发现 GDB 允许提供自定义构建的库来调试线程(有关信息,请参阅文档)
我已经尝试过这样做,并且能够通过td_thr_get_info
实现gdb/common/gdb_thread_db.h
.
我仍然无法向 gdb 提供有关我的线程上下文的任何信息,并且仍在寻找有关该问题的任何线索。
谢谢。
PS:这个问题似乎解决了同样的问题,但不幸的是也没有方向。