我可以使用AspectJ或任何aop方法或类的任何外部方法获得任何循环的循环迭代次数吗?想象一下循环只增加局部变量(不是方法参数),或类似的东西,你无法通过连接点得到什么。我知道将join连接点设置为局部变量是不可能的。
public int iterationsOfLoop() {
int count = 0;
for(int i = 0, i<10; i++) {
count++;
}
return count;
}
答案 0 :(得分:0)
我认为使用aspectJ是不可能的。
还有其他方法,例如用于测试中的cobertura报告的库会显示计算程序通过每一行的次数的报告。这些库使用一些表单或代码检测。
最相关的cobertura库可能是clover,emma或cobertura,您可以尝试查找有关此库使用的技术的一些信息,并尝试执行类似的操作。
不是一件容易的事。
答案 1 :(得分:0)
简短回答,不。
大多数切入点定义只能绑定到方法调用,遗憾的是++
不是。您可以使用cflow
样式切入点,但这会绑定到每个指令执行,并且不会选择++
。如果必须使用aspectj,那么更好的方法是使用带增量方法的Counter
类。或者如果您没有绑定aspectj,然后使用ASM进行静态分析,您应该能够选择我认为通常用于for循环的字节码iinc
,并插入自定义字节码来调用并通知您增量的自定义方面。