关闭

通过StackTraceElement获取方法调用者的具体信息

标签: StackTraceElementStackStackTracejava
3263人阅读 评论(0) 收藏 举报
分类:

本文简要介绍了StackTrace(堆栈轨迹)以及StackTraceElement的一些用法


一、什么是StackTrace

StackTrace(堆栈轨迹)可以认为是一系列方法调用过程的集合。

异常处理中常用的printStackTrace()即为打印异常调用的堆栈信息。

二、StackTraceElement介绍

StackTraceElement表示StackTrace(堆栈轨迹)中的一个元素,属性包括方法调用者的类名、方法名、文件名以及调用的行数。

public final class StackTraceElement implements java.io.Serializable {
    // Normally initialized by VM (public constructor added in 1.5)
    private String declaringClass;
    private String methodName;
    private String fileName;
    private int    lineNumber;

StackTraceElement被定义为final,可见其作为一个java的基础类不允许被继承。

获取StackTraceElement的方法有两种,均返回StackTraceElement数组

1、Thread.currentThread().getStackTrace()
2、new Throwable().getStackTrace()

StackTraceElement数组包含了StackTrace(堆栈轨迹)的内容,通过遍历它可以得到方法间的调用过程,

即可以得到当前方法以及其调用者的方法名、调用行数等信息

public class TestClass
{  
    public static void main(String[] args)  
    {
        new TestClass().methodA();
    }

    private void methodA(){
        System.out.println("------进入methodA----------");
        methodB();
    }

    private void methodB(){
        System.out.println("------进入methodB----------");
        StackTraceElement elements[] = Thread.currentThread().getStackTrace();
        for (int i = 0; i < elements.length; i++) {
            StackTraceElement stackTraceElement=elements[i];
            String className=stackTraceElement.getClassName();
            String methodName=stackTraceElement.getMethodName();
            String fileName=stackTraceElement.getFileName();
            int lineNumber=stackTraceElement.getLineNumber();
            System.out.println("StackTraceElement数组下标 i="+i+",fileName="
                    +fileName+",className="+className+",methodName="+methodName+",lineNumber="+lineNumber);
        }
    }
}
执行main方法,输出信息如下


可以看到在方法B中使用getStackTrace,

得到StackTraceElement数组中下标为2的element表示方法B的调用者方法A的详细信息


3
0
查看评论

StackTraceElement获取方法调用栈的信息

一、什么是StackTraceStackTrace(堆栈轨迹)存放的就是方法调用栈的信息,异常处理中常用的printStackTrace()实质就是打印异常调用的堆栈信息。二、StackTraceElement介绍StackTraceElement表示StackTrace(堆栈轨迹)中的一个方法对象...
  • hp910315
  • hp910315
  • 2016-09-29 15:20
  • 5166

StackTraceElement用法

一、什么是StackTrace StackTrace(堆栈轨迹)可以认为是一系列方法调用过程的集合。 异常处理中常用的printStackTrace()即为打印异常调用的堆栈信息。 二、StackTraceElement介绍 StackTraceElement表示StackTrace(堆栈...
  • CodeHarvest
  • CodeHarvest
  • 2017-04-27 17:05
  • 407

利用线程运行栈StackTraceElement设计Android日志模块

如果你想实现自动MainActivity:onCreate(line:37)
  • tangjiean
  • tangjiean
  • 2014-08-25 20:19
  • 1913

J2SE基础夯实系列之使用StackTraceElement封装,打印调试代码!

这个是在Alcatel-Lucent实习的时候,学到。        原来老是看别人说要掌握Java的几个API包,例如lang和util,起码要熟悉,本来以为自己已经熟悉了,现在才知道自己还差得远啊。需要上网搜集各包的相...
  • Allen_Zhao_2012
  • Allen_Zhao_2012
  • 2012-08-14 15:27
  • 4544

Android 从StackTraceElement反观Log库

本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/52506545; 本文出自:【张鸿洋的博客】 一、概述 大家编写...
  • u013651026
  • u013651026
  • 2018-01-28 22:28
  • 24

java.lang.StackTraceElement类

java.lang.StackTraceElement 类元素代表一个堆栈帧。除了一个在堆栈的顶部所有的栈帧代表一个方法调用。在堆栈顶部的帧表示在将其生成的堆栈跟踪的执行点。 类声明 以下是java.lang.StackTraceElement类的声明: public fin...
  • zhongguomao
  • zhongguomao
  • 2015-12-21 18:27
  • 1786

使用Stacktrace处理异常

Stacktrace(堆栈跟踪)是一个非常有用的调试工具. 在未捕获的异常被抛出时(或者手动制造堆栈跟踪的时候)它让你看到你调到的堆(意思是,在某一点调用方法的堆). 不仅显示出出现错误的地方, 也显出程序在那个地方是如何结束的.
  • u012585964
  • u012585964
  • 2016-06-28 00:30
  • 12150

运行时获取方法调用堆栈信息

在运行期间可以通过throwable类来获取方法调用堆栈信息,例如哪个方法调用的当然方法,当前运行类的类名,文件名,代码行等等。    Throwable ex = new Throwable();    StackTraceElement...
  • zhigangsun
  • zhigangsun
  • 2008-01-18 13:20
  • 764

通过StackTraceElement获取方法调用者的具体信息

原文链接: http://blog.csdn.net/argel_lj/article/details/49925657 StackTrace(堆栈轨迹) 其中包含的消息   ,  其实就是我们跑程序的时候报错 的相关消息。 本文简要介绍了StackTrace...
  • liuxiangke0210
  • liuxiangke0210
  • 2017-07-09 10:26
  • 98

Android——使用StackTraceElement实现自己的Log日志输出管理类

直接上代码,我们可以根据实际需求进行调整和补充。 关于StackTraceElement的介绍,在我的另外一篇文章中可以看到。package com.example.chenbing.animdvedemo.Utils;import java.util.Locale;import com.exam...
  • qq_31370269
  • qq_31370269
  • 2016-08-25 14:05
  • 2396
    个人资料
    • 访问:69550次
    • 积分:344
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:0篇
    • 译文:0篇
    • 评论:8条
    文章分类
    文章存档
    最新评论