6

我正在启动一个项目,该项目必须为覆盖目的(变量的定义使用等)检测 java 应用程序。它必须向应用程序添加跟踪语句和一些逻辑,并可能删除语句。

我一直在寻找检测 Java 代码的方法,而我总是找到关于字节码检测的方法。

我的问题是:这是检测 Java 应用程序的唯一方法吗?还有其他方法可以做到这一点吗?字节码检测与其他检测相比有哪些优势?

我可能会使用字节码解决方案,但我想知道其他方法(如果有的话)有什么问题来精确决定。

谢谢!

4

3 回答 3

3

另一种接近更改字节码的方法是使用 AOP(面向方面​​编程)。主库是AspectJ,它也主要定义了该区域。

第三个可能有趣的选项(因为您刚刚开始使用该程序)是使用Spring。这意味着您将必须了解一些有关 IOC(控制反转)的知识,但这基本上意味着您不必自己创建对象,而是让 spring 为您完成它,它有它的优势,因为当 spring 负责创建时,它可以在创建过程中添加各种东西,而无需您自己在 aspectj 中真正声明它。

就复杂性而言,我可能会评价它:

  • 春天(最简单)
  • 方面j
  • 字节码检测(最难)

但在谈论能力(权力)时,情况恰恰相反。例如,只有使用最后一个(我认为)才能执行减法代码之类的操作

于 2012-07-24T20:47:24.340 回答
2

你绝对应该看看AspectJ

根据您的描述,您将能够用它做您想做的事情。

自己进行字节码检测是绝对可能的,但要复杂得多。

我认为您应该首先检查 AsepctJ,然后作为最后的手段自己回去进行字节码检测。

于 2012-07-24T20:41:14.297 回答
0

请参阅我关于使用程序转换引擎构建覆盖工具的论文。 这种方法的优点是它可以用于任意编程语言。此外,它以程序员的方式查看源代码,而不是编译后的字节码(随着泛型变得更加复杂,并且被磨成更精细的字节码,通过检查字节码来理解源代码变得更加困难)。

可能值得注意的是,程序转换概括了面向方面的编程。

于 2012-07-24T20:48:34.480 回答