如何编写探查器?

2022-09-03 05:02:30

我会知道如何写一个分析器?推荐哪些书籍和/或文章?任何人都可以帮我吗?

有人已经做过这样的事情了吗?


答案 1

令人鼓舞的很多,我们不是:)

如果您只是想合理地了解程序花费大部分时间的位置,则分析器不会太难。如果你对高精度和最小的干扰感到困扰,事情就会变得困难。

因此,如果yoyu只想得到一个分析器会给你的答案,那就去找一个别人写的。如果你正在寻找智力挑战,为什么不去写一个呢?

我已经写了几个,用于多年来变得无关紧要的运行时环境。

有两种方法

  • 向每个函数或其他记录时间和位置的重要点添加一些内容。

  • 定期关闭计时器并查看程序当前的位置。

JVMPI版本似乎是第一种 - uzhin提供的链接表明它可以报告很多事情(见第1.3节)。执行的操作会更改以执行此操作,因此分析可能会影响性能(如果您正在分析其他非常轻量级但通常称为函数的内容,则可能会误导)。

如果可以获得计时器/中断,告诉您程序计数器在中断时的位置,则可以使用符号表/调试信息来确定它当时处于哪个函数中。这提供的信息较少,但破坏性较小。通过遍历调用堆栈以识别调用方等,可以获得更多信息。我不知道这些在Java中是否可行...

保罗。


答案 2

我会先看看那些开源项目:

然后我会看看JVMTI(不是JVMPI)


推荐