我正在做一些Java应用程序检测。但是使用ASM或BCEL的可用检测工具仅允许检测字节码。你们知道一些可以检测应用程序执行情况的工具(例如,字节码中没有的东西,但JVM确实有)。
例如,如果应用程序具有A类
class A
{
int a;
public A()
{}
}
当我执行
A obj = new A()
时,字节代码将不包含对obj.a
的任何写操作,但是JVM将执行AFIK。还有其他无法用字节码捕获的内容。所以,你们能告诉我是否存在一个可以捕获JVM执行的操作的框架。
最佳答案
如果要完全控制仪器,理想情况下,您需要完全访问源并具有修改源的能力。否则,您将无法保留字节码。
我们的DMS Software Reengineering Toolkit是一个程序转换系统,可提供对源的这种访问。使用其Java Front End,DMS可以解析(Java)代码,构建AST,对AST进行任意转换以及重新生成检测的Java代码。
您选择的乐器取决于您自己。该paper on instrumenting code描述了如何建立经典的测试覆盖率,但是这些想法是通用的。