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

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

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

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

有没有其他方法来实现这一目标?

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

最佳答案 您可以使用信号解决此问题.选择一个未使用的信号,例如SIGUSR1,并使用struct sigaction的sa_sigaction成员为其安装信号处理程序并指定SA_SIGINFO标志.阻止除感兴趣的线程(线程B)之外的每个线程中的信号.

如果要检查线程B,请使用pthread_kill()向其发送线程信号.然后信号处理程序将触发,其第三个参数将是指向ucontext_t结构的指针.此结构的uc_mcontext成员是与机器相关的mcontext_t结构,它将包含线程被中断点处的寄存器值.

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

点赞