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出现的位置很清晰对开发维护成本可以提高。

  • 相关阅读:
    正则表达式匹配负数和数字
    下拉框select chosen被遮盖
    获取JavaScript对象的方法
    管理机--Jumpserver由docker搭建
    腾讯云--腾讯云sdk-实现脚本修改腾讯云负载均衡权重
    Linux系统中使用confluence构建企业wiki
    腾讯云--对象存储cos绑定自定义域名
    python(一)python的操作符
    pytest(五)用例传fixture参数
    pytest(四)firture自定义用例预置条件
  • 原文地址:https://www.cnblogs.com/fofawubian/p/3360554.html
Copyright © 2011-2022 走看看