2

线程 A 是否可以(在 C 或 C++ 程序中,在 64 位英特尔架构的 Linux 下运行)读取线程 B 的程序计数器寄存器的值,而不需要对线程 B 的代码进行任何特殊检测?

(我意识到这是一件奇怪的事情;这种愿望只是因为我很好奇线程 A 是否可以使用它来检测线程 B 是否陷入失败的系统调用,如此所述)

4

1 回答 1

3

在 Linux 上/proc/self/task/%d/stat%d需要用相关线程的内核 tid 填写的字段 30 包含线程的最后观察到的指令指针值。请参阅http://man7.org/linux/man-pages/man5/proc.5.html并注意它记录在下面,/proc/[pid]/stat但当前进程下的目录中的版本task是您想要针对线程的版本。

困难的部分可能是获取线程的内核 tid。最简单的方法是syscall(SYS_gettid)从线程调用并将其内核 tid 存储在某处。

于 2015-05-06T22:32:39.867 回答