是否可以读取另一个线程的程序计数器?

Is it possible to read another thread's program counter?

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

(我意识到想要做的事情很奇怪;出现这种愿望只是因为我很好奇线程 A 是否可以使用它来检测线程 B 是否卡在失败的系统调用中,如所述)

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

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