追踪函数调用栈

有时候发现一个接口被调用了多次,想反向查找接口在哪里被调用的,但如果代码不熟悉,很难确定是在哪里被调用的,这时可以使用打印调用栈的方法,在被调用接口中加上打印调用栈的信息,通过观察打印的调用栈信息来判断接口是在哪里被调用的,具体打印调用栈的方法如下:

<span style="white-space:pre">	</span>StackTraceElement[] stacks = new Throwable().getStackTrace();
        for(int i=0;i<stacks.length;i++){
            Log.v("YAN", "stack:" + "FileName" + ":" + stacks[i].getFileName());
            Log.v("YAN", "stack:" + "ClassName" + ":" + stacks[i].getClassName());
            Log.v("YAN", "stack:" + "Line" + ":" + stacks[i].getLineNumber());
            Log.v("YAN", "stack:" + "MethodName" + ":" + stacks[i].getMethodName());
        }

还有一种方式:

<span style="white-space:pre">	</span>StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
        for(int i=0;i<stacks.length;i++){
            Log.v("YAN", "stack:" + "FileName" + ":" + stacks[i].getFileName());
            Log.v("YAN", "stack:" + "ClassName" + ":" + stacks[i].getClassName());
            Log.v("YAN", "stack:" + "Line" + ":" + stacks[i].getLineNumber());
            Log.v("YAN", "stack:" + "MethodName" + ":" + stacks[i].getMethodName());
        }
两种方式的实现不在同一个java文件中,一个在Throwable.java中,另一个在Thread.java中,具体的表现是使用Thread.currentThread().getStatcTrace()的方式会多打印一层线程的调用栈信息,更加细节的区别还没有研究.

你可能感兴趣的:(追踪函数调用栈)