zoukankan      html  css  js  c++  java
  • 分析堆栈跟踪元素

    package com.tsjt.exception.stack;
    
    import java.util.Scanner;
    
    public class StackTraceTest {
        
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            System.out.print("Enter n: ");
            int n = in.nextInt();
            factorial(n);
        }
        
        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;
        }
    
    }

    通过eclipse控制台输入
     

    Enter n: 1
    factorial(1):
    com.tsjt.exception.stack.StackTraceTest.factorial(StackTraceTest.java:17)
    com.tsjt.exception.stack.StackTraceTest.main(StackTraceTest.java:11)
    return 1
    

     通过结果我们来看下堆栈跟踪顺序

    com.tsjt.exception.stack.StackTraceTest.factorial(StackTraceTest.java:17)
    com.tsjt.exception.stack.StackTraceTest.main(StackTraceTest.java:11)
    

    上面两行控制台结果是通过下面代码输出的。

    Throwable t = new Throwable();
    		StackTraceElement[] frames = t.getStackTrace();
    		for (StackTraceElement f : frames) {
    			System.out.println(f);
    		}

    我们看下为什么看能输出这两行代码呢?请看下图就明白了。

    总结:通过分析堆栈跟踪元素可以看出异常对象Throwable可以得出StackTraceElement[] frames = t.getStackTrace();

    而StackTraceElement这对象可以得出:

                   堆栈所在的对象类路径   declaringClass "com.tsjt.exception.stack.StackTraceTest"    

                   堆栈所在的文件名  fileName "StackTraceTest.java"

                   堆栈跟踪的代码行数 lineNumber 17 

                    堆栈所调用的方法名 methodName "factorial"

    通过这些我们可以看出把异常对象Throwable运用好对我们系统bug出现的位置很清晰对开发维护成本可以提高。

  • 相关阅读:
    502 IPO 上市
    501 Find Mode in Binary Search Tree
    500 Keyboard Row 键盘行
    498 Diagonal Traverse 对角线遍历
    Django_modelform组件
    Django_RBAC_demo2 升级版权限控制组件
    Django admin组件源码流程
    Django_rbac_demo 权限控制组件框架模型
    Django_重装系统后无法使用 sqlite 数据库报错:com.intellij.execution.ExecutionException: Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
    python_面向对象小试题
  • 原文地址:https://www.cnblogs.com/fofawubian/p/3360554.html
Copyright © 2011-2022 走看看