GDB如何了解线程

时间:2013-08-22 07:44:42

标签: multithreading gdb

我想更深入地了解GDB如何了解线程。

  • 如何判断哪一个是当前线程?
  • 它如何知道与每个线程相关的所有上下文信息?

我的问题针对的是它在GDB内部是如何工作的,调试线程没有任何问题,这完全是关于GDB的内部结构。

我找到GDB internals documentation,但线程部分现在是空的。
我所有的其他研究都让我质疑调试多线程程序,我似乎无法挖掘出我想要的精确信息。

编辑:

到目前为止,似乎GDB拦截信号(感谢ptrace?)并找出线程何时创建。但我想更准确地了解它是如何实际完成的。

我还有一个特殊的体系结构,它带有一个配置了--enable-threads = single的GDB。然而,GDB能够列出当前线程。这怎么可能?

欢迎每一条知识,有用的链接或文件。

感谢。


更新2014年3月5日

我查看了libthread_db并发现GDB允许提供一个自定义构建的库来调试线程(参见doc获取信息)

我试图通过实现td_thr_get_info中定义的gdb/common/gdb_thread_db.h函数来提供有关我的线程(ID,启动函数,堆栈等)的gdb信息。

仍然我无法向gdb提供有关我的主题上下文的任何信息,仍然在寻找关于该问题的任何线索。

感谢。

PS:This question似乎解决了同样的问题,但遗憾的是没有任何指示。

1 个答案:

答案 0 :(得分:2)

尝试搜索有关libthread_db的信息。