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

Teaching gdb to understand micro-threads from core files

本文关键字:线程 文件 核心 gdb      更新时间:2023-10-16

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

如果我正在进行实时调试,我可以将所有寄存器替换为来自微线程上下文的寄存器。我写了一个宏来做到这一点,它工作得很好。

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

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

沙查尔

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

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