1

我试图更深入地了解 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:这个问题似乎解决了同样的问题,但不幸的是也没有方向。

4

1 回答 1

2

尝试搜索有关libthread_db.

于 2013-08-22T08:17:50.000 回答