【问题标题】:Teaching gdb to understand micro-threads from core files教 gdb 从核心文件中理解微线程
【发布时间】:2013-11-27 03:55:05
【问题描述】:

我正在开发一个大型程序,该程序采用(定制的)微线程解决方案。有时我需要调试崩溃。在这种情况下,能够从一个微线程切换到另一个微线程是很有用的。

如果我正在进行实时调试,我可以将所有寄存器替换为来自微线程上下文的寄存器。我为此编写了一个宏,并且效果非常好。

问题是,如果我在进行事后调试(来自核心文件),我无法更改寄存器值。在这种情况下,我无法告诉 GDB 改变它对当前帧是什么的概念,因为在这种情况下所有寄存器都被认为是只读的。

有没有办法告诉 GDB 我的自定义上下文管理?

沙查尔

【问题讨论】:

  • 您好,我现在也遇到了同样的问题,请问您找到解决方法了吗?我正在研究可以传递给 GDB 的libthread-db(参见doc)。也许可以实现gdb/common/gdb_thread_db.h 然后使用这个库,但我仍然在努力解决这个问题。谢谢!
  • 目前还没有解决方案。不过,我会研究你的建议。
  • 我已经尝试实现这个 libthread_db 的草稿,它可以与我的自定义线程的结构进行交互。到目前为止,我已经设置了一些线程 ID 和此类属性,但我仍然坚持寻找如何让 GDB 理解上下文并替换它们所在的线程。
  • 我还向您提供 my thread 以防万一出现问题。

标签: c++ multithreading gdb threadcontext


【解决方案1】:

在 gdb 中没有一种简单的内置方法可以做到这一点。

我认为最简单的方法可能是编写一个 gdbserver 版本,它可以读取您的核心文件并将您的微线程作为真正的线程呈现给 gdb。至少有一个 gdbserver 已经可以读取核心文件,所以也许这并不难。但是,我不能确定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2012-12-13
    • 2012-09-19
    相关资源
    最近更新 更多