如何在java中获取调用层次结构

时间:2013-11-07 07:08:02

标签: java stack-trace call-hierarchy

我有三个名为FirstClass,SecondClass and ThirdClass的班级。以下是三个类的来源:

FirstClass.java

public class FirstClass {
    public void firstMethod(){
        SecondClass secondClass = new SecondClass();
        secondClass.secondMethod();
    }
    public static void main(String[] args) {
        FirstClass firstClass = new FirstClass();
        firstClass.firstMethod();
    }

}

SecondClass.java

public class SecondClass {
    public void secondMethod(){
        ThirdClass thirdClass = new ThirdClass();
        thirdClass.thirdMethod();
    }

}

ThirdClass.java

public class ThirdClass {
    public void thirdMethod(){
        System.out.println("Here i need to print where the call comes from,(call hierarchy) Is it possible?");
    }
}

在最后的方法(这里是ThirdClass.thirdMethod())上,我需要打印方法调用的来源(我的意思是调用层次结构)。那么我需要在thirdMethod()中为那个

写一下

5 个答案:

答案 0 :(得分:5)

尝试这样的方法来访问当前线程的堆栈:

Thread.currentThread().getStackTrace();

这将返回一个StackTraceElement数组,然后您可以打印或检查或执行任何操作。

但是,请注意:如果您的方法的行为有所不同,具体取决于您的方法的调用者(例如,通过分析堆栈并对其做出反应),您可以创建一些非常罕见和意外的行为anybode使用这样的代码。

答案 1 :(得分:5)

请参阅Thread的文档。

特别是,Thread.currentThread().getStackTrace()检索有关跟踪的信息,Thread.dumpStack()打印当前的堆栈跟踪。

没有必要使用Exception或其他任何东西。

答案 2 :(得分:4)

尝试这个简单的事情:

Thread.dumpStack();

将当前线程的堆栈跟踪打印到标准错误流。

供参考,http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

微妙的说明,它正在写入错误流,因此您可以像标准控制台输出那样重定向它:

java FirstClass >normaloutput.log 2>yourstackdumps.log

答案 3 :(得分:1)

您可以尝试Thread.currentThread()。getStackTrace()

它返回一个StackTraceElement数组,它有一个方法getClassName()

答案 4 :(得分:1)

您可以尝试Thread.currentThread().getStackTrace()