• java 打印程序堆栈中的信息


    简介

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

    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
    
    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    sql的reader方法注意事项
    C++ pair(对组)的简单了解
    cin>>
    枚举
    FirstTry_HelloWorld
    错误:'class QApplication' has no member named 'setMainwidget'
    Open Asset Import Library(assimp) vs2010编译
    vs2010中配置OpenGL以及针对64位系统所遇问题的解决办法
    修改文件夹权限以及右键终端设置
    ubuntu中安装iso文件
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/13585222.html
Copyright © 2020-2023  润新知