是否可以在不停止被跟踪者的情况下读取线程的指令指针?

Posted

技术标签:

【中文标题】是否可以在不停止被跟踪者的情况下读取线程的指令指针?【英文标题】:Is it possible to read the instruction pointer of a thread without stopping the tracee? 【发布时间】:2015-09-13 13:06:41 【问题描述】:

我正在考虑在 Linux 上编写一个特定于应用程序的基于采样的分析器。如果我正确理解手册页,ptrace API 依赖于内核中的检测,当内核中发生某些事件时,该检测会停止跟踪。

有没有办法在不停止进程的情况下读取线程的指令指针(从另一个内核上的另一个线程)?

【问题讨论】:

【参考方案1】:

首先,单独的指令指针对于分析是没有用的,无论应用程序如何特定。 查看this post 上的第二个答案,了解所有相关问题的讨论。

其次,要从线程中获取任何有用的信息,您确实必须停止它足够长的时间以读取信息,然后它才能重新启动。 (注意,当它响应任何类型的中断时都会发生这种情况。)

不要认为您需要大量样本(或者因此您的采样速度必须很快)。 这是一个长期流行的被广泛接受的想法(并且由应该更了解的人教授),而且它没有基础、统计或其他方面。 (学者可能想look here。)

第三,看看lsstack。 如果您想编写自己的分析器,这将是一个很好的代码库。

【讨论】:

以上是关于是否可以在不停止被跟踪者的情况下读取线程的指令指针?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不停止 iPod 音乐的情况下播放声音?

在不移动文件指针的情况下检查文件指针是不是已达到 EOF?

是否可以在不使用 kill 命令的情况下停止 xsp --nonstop 进程?

java是不是有任何机制让VM在不使用javaagent等的情况下跟踪自身的方法调用?

在不停止整个程序的情况下休眠 Lua 脚本?

(JFrame)如何在不显示的情况下读取随机数进行比较?