我正在做一些 Java 应用程序检测。但是使用 ASM 或 BCEL 的可用检测工具只允许检测字节码。你们知道一些可以检测应用程序执行的工具吗(比如那些不仅存在于字节码中而且 JVM 做到了的东西)。
例如,如果应用程序有一个类 A
class A
{
int a;
public A()
{}
}
当我执行 A obj = new A()
时,字节码将不包含对 obj.a
的任何写入,但 JVM 会这样做,< strong>AFIK.
还有一些其他的东西是字节码无法捕获的。那么,你们能告诉我是否存在这样一个框架,可以捕获JVM 执行的操作。
最佳答案
如果您想完全控制仪器,理想情况下您需要完全访问源代码并能够修改它。否则,您将受字节码保留内容的支配。
我们的 DMS Software Reengineering Toolkit是一个程序转换系统,提供对源的这种访问。使用其 Java Front End , DMS 可以解析 (Java) 代码、构建 AST、对 AST 应用任意转换并重新生成经过检测的 Java 代码。
您选择检测什么取决于您。这paper on instrumenting code描述了如何构建经典的测试覆盖率,但思路很笼统。
关于java - 检测 Java 应用程序的执行(不仅仅是字节码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8627179/