简介
作为程序奔溃调试的手段核心操作就是查看程序的堆栈。
code
package cn;
import java.util.Scanner;
public class StackTraceTest {
public static int factorial(int n){
System.out.println("factorial(" + n +"):");
Throwable t = new Throwable();
StackTraceElement[] frames = t.getStackTrace();
for (StackTraceElement f : frames){
System.out.println(f);
}
int r;
if(n <= 1) r = 1;
else r = n * factorial(n - 1);
System.out.println("return" + r);
return r;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("Enter n:");
int n = in.nextInt();
factorial(n);
}
}
result
Enter n:5
factorial(5):
cn.StackTraceTest.factorial(StackTraceTest.java:8)
cn.StackTraceTest.main(StackTraceTest.java:23)
factorial(4):
cn.StackTraceTest.factorial(StackTraceTest.java:8)
cn.StackTraceTest.factorial(StackTraceTest.java:15)
cn.StackTraceTest.main(StackTraceTest.java:23)
factorial(3):
cn.StackTraceTest.factorial(StackTraceTest.java:8)
cn.StackTraceTest.factorial(StackTraceTest.java:15)
cn.StackTraceTest.factorial(StackTraceTest.java:15)
cn.StackTraceTest.main(StackTraceTest.java:23)
factorial(2):
cn.StackTraceTest.factorial(StackTraceTest.java:8)
cn.StackTraceTest.factorial(StackTraceTest.java:15)
cn.StackTraceTest.factorial(StackTraceTest.java:15)
cn.StackTraceTest.factorial(StackTraceTest.java:15)
cn.StackTraceTest.main(StackTraceTest.java:23)
factorial(1):
cn.StackTraceTest.factorial(StackTraceTest.java:8)
cn.StackTraceTest.factorial(StackTraceTest.java:15)
cn.StackTraceTest.factorial(StackTraceTest.java:15)
cn.StackTraceTest.factorial(StackTraceTest.java:15)
cn.StackTraceTest.factorial(StackTraceTest.java:15)
cn.StackTraceTest.main(StackTraceTest.java:23)
return1
return2
return6
return24
return120
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》