Java打印某个方法栈中调用顺序

当你维护别人的代码时候,会发现某个方法被代码多处调用,如果你想知道该方法是从那一个地方调用过来的,可以在这个方法中打印该方法在程序运行是栈中的调用顺序。

代码片段如下:

import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.UnknownHostException;


public class TestForStack {
public static void main(String[] args) {
new TestForStack().f();
}


private void a() {
Throwable t = new Throwable();
t.fillInStackTrace();
System.out.println(getStackTraceString(t));
}


private void b() {
a();
}


private void c() {
b();
}


private void d() {
c();
}


private void e() {
d();
}


private void f() {
e();
}


public static String getStackTraceString(Throwable tr) {
if (tr == null) {
return "";
}
Throwable t = tr;
while (t != null) {
if (t instanceof UnknownHostException) {
return "";
}
t = t.getCause();
}


StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
tr.printStackTrace(pw);
return sw.toString();
}
}

我打印了方法a()在程序运行中的调用顺序,运行结果如下:
java.lang.Throwable
at com.pinguo.android.csdn.TestForStack.a(TestForStack.java:14)
at com.pinguo.android.csdn.TestForStack.b(TestForStack.java:19)
at com.pinguo.android.csdn.TestForStack.c(TestForStack.java:23)
at com.pinguo.android.csdn.TestForStack.d(TestForStack.java:27)
at com.pinguo.android.csdn.TestForStack.e(TestForStack.java:31)
at com.pinguo.android.csdn.TestForStack.f(TestForStack.java:35)
at com.pinguo.android.csdn.TestForStack.main(TestForStack.java:9)

结果显示调用的顺序是从下而上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章