Java 如何使用AspectJ打印方法的调用层次结构?
我的目标是在一个大项目中找出调用几个特定API方法的地方以及调用方式 e、 g.给出两种方法,分别是Java 如何使用AspectJ打印方法的调用层次结构?,java,aspectj,Java,Aspectj,我的目标是在一个大项目中找出调用几个特定API方法的地方以及调用方式 e、 g.给出两种方法,分别是com.pack.API.x()和com.pack.API.y() 我想知道何时调用它们,调用时的调用层次结构是什么,使用了哪些参数 我使用的是AspectJ,但它只能告诉我调用方法的位置,而不能告诉我完整的调用层次结构。以下是我写的示例切入点和建议: import org.aspectj.lang.Signature; public aspect TraceXCut { pointcut x
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());
}
}
在方法开始时,为什么不使用以下方法:
new Exception().printStackTrace();
如果您实际上没有抛出异常,代码将正常继续。至于参数,您也可以打印出来。谢谢,简单有效:)