有没有办法从同一进程中的另一个线程查看一个线程的寄存器内容?

Is there a way to view the register contents of one thread from another thread within the same process?

假设我有一个包含三个线程的进程:A、B 和 C。

我想使用线程 A 暂停线程 B,检查线程 B 的寄存器 values/stack 内容,然后将一些信息从线程 B 提供给线程 C(通过线程 A)。

根据 Linus Torvalds 的 this post,ptrace 系统调用在这里不起作用,因为线程在同一个进程中。

还有其他方法可以实现吗?

更新:this 问题讨论了为什么 它不起作用;我想知道是否存在不涉及创建子进程的解决方法。

您或许可以使用信号解决此问题。选择一个未使用的信号,例如 SIGUSR1 并使用 struct sigactionsa_sigaction 成员并指定 SA_SIGINFO 标志为其安装信号处理程序。在除感兴趣的线程(线程 B)之外的每个线程中阻塞信号。

当你想检查线程 B 时,使用 pthread_kill() 向它发送线程定向信号。然后信号处理程序将触发,其第三个参数将是指向 ucontext_t 结构的指针。此结构的 uc_mcontext 成员是一个依赖于机器的 mcontext_t 结构,它将包含线程中断时的寄存器值。

然后您只需要设计一种安全的方法将这些值传回线程 A。