我的目标是在一个大型项目中找到一些特定的API方法,以及以何种方式调用。
e.g。如果有两种方法,请说com.pack.API.x()
和com.pack.API.y()
我想知道它们何时被调用,调用时的调用层次结构是什么以及使用了哪些参数?
我正在使用AspectJ,但它只能告诉我调用方法的位置,而不是完整的调用层次结构。这是我写的一个示例切入点和建议:
import org.aspectj.lang.Signature;
public aspect TraceXCut {
pointcut xCall() : (call(* com.pack.API.x(..)) && !cflow(within(TraceXCut)));
before() : xCall() {
Signature sig = thisJoinPointStaticPart.getSignature();
String line = "" + thisJoinPointStaticPart.getSourceLocation().getLine();
String sourceName = thisJoinPointStaticPart.getSourceLocation().getWithinType().getCanonicalName();
System.out.println("Call from " + sourceName + " line " + line
+ " to " +sig.getDeclaringTypeName() + "." + sig.getName());
}
}
答案 0 :(得分:0)
在方法开始时,为什么不使用类似的东西:
new Exception().printStackTrace();
如果您实际上没有抛出异常,您的代码将继续正常运行。至于参数,你也可以打印它们。