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)

結果顯示調用的順序是從下而上。

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