教gdb了解核心文件中的微线程

时间:2013-11-14 08:11:10

标签: c++ multithreading gdb threadcontext

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

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

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

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

Shachar

1 个答案:

答案 0 :(得分:0)

在gdb中没有一种简单的内置方法。

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