简介

作为程序奔溃调试的手段核心操作就是查看程序的堆栈。

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
posted on 2020-08-30 14:32  HDU李少帅  阅读(865)  评论(0编辑  收藏  举报