Java AspectJ-循环迭代次数
我可以使用AspectJ、aop方法或类的任何外部方法获得任何循环的多次循环迭代吗?想象一下,循环只增加局部变量(而不是方法参数),或者类似的东西,这是通过连接点无法得到的。我知道将joinpoint设置为局部变量是不可能的Java AspectJ-循环迭代次数,java,aop,aspectj,Java,Aop,Aspectj,我可以使用AspectJ、aop方法或类的任何外部方法获得任何循环的多次循环迭代吗?想象一下,循环只增加局部变量(而不是方法参数),或者类似的东西,这是通过连接点无法得到的。我知道将joinpoint设置为局部变量是不可能的 public int iterationsOfLoop() { int count = 0; for(int i = 0, i<10; i++) { count++; } return count; } publi
public int iterationsOfLoop() {
int count = 0;
for(int i = 0, i<10; i++) {
count++;
}
return count;
}
public int iterationsofolop(){
整数计数=0;
对于(inti=0,i我认为aspectJ不可能
还有其他方法,例如,测试中用于cobertura报告的库为您提供报告,计算程序通过每行的次数。这些库使用某种形式或代码插装
最相关的cobertura库可能是clover、emma或cobertura,您可以尝试查找有关这些库使用的技术的信息,并尝试做类似的事情
这不是一项容易的任务。简短的回答,不
大多数切入点定义只能绑定到方法调用,不幸的是,++
不是。您可以使用cflow
样式的切入点,但这会绑定到每个指令执行,并且不会选择++
。如果必须使用aspectj,那么更好的方法是使用计数器使用增量方法初始化。或者,如果您没有绑定到aspectj,那么使用ASM进行静态分析,您应该能够选择字节码iinc
,我认为它通常用于for循环,并插入自定义字节码来调用并通知您的自定义增量方面
为什么你认为AOP是答案?这是因为你不能编辑源代码吗?它是为了分析的目的,几乎每一个度量,我将通过AOP访问,所以这是我的问题的原因。我不认为AOP是最好的答案,但是我在寻找解决方案并互相考虑。我可以编辑源代码,所以如果你有一个NY想法,解决方案,我将学习和考虑它。谢谢你,你总是可以实现一个简单的剖析器,这些事件你可以分析这些类可以订阅(因此代码改变)。。然后,您可以引发这些事件并让探查器分析代码执行。代码插装是我尝试的第一个解决方案之一,它可以工作,但我希望避免更改源代码,尽管这个问题不可能。