【问题标题】:Is there a way to view the register contents of one thread from another thread within the same process?有没有办法从同一进程中的另一个线程查看一个线程的寄存器内容?
【发布时间】:2015-11-13 20:10:29
【问题描述】:

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

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

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

还有其他方法可以做到吗?

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

【问题讨论】:

    标签: c linux multithreading pthreads ptrace


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2013-05-16
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      相关资源
      最近更新 更多