在Java中,我想获得如何对哪些方法进行调用的堆栈跟踪。我怎样才能做到呢?
例如,我的调用堆栈是:class Example {
public void init() {
func1();
// TODO : now here I want to print the stack trace that it went from:
// func1
// func2
// func3
}
public void func1() {
func2();
}
public void func2() {
func3();
}
public void func3() {
// some code here
}
}
这是你想要的
class Example {
public void init() {
func1();
// TODO : now here I want to print the stack trace that it went from:
try { throw new Throwable("Debugging") } catch (Throwable t) { t.printStackTrace(); }
// or
System.out.println(Arrays.toString(Thread.currentThread().getStackTrace()));
// func1
// func2
// func3
}
public void func1() {
func2();
}
public void func2() {
func3();
}
public void func3() {
// some code here
}
}
使用IDE并使用断点。就我个人而言,我使用IntelliJ。您可以在代码中添加断点。当遇到断点时,将使程序停止。在那个时候,你可以在IntelliJ的调试器窗口中看到调用堆栈。
IntelliJ为调试提供了强大的支持,并且还提供了简单的教程来开始使用IntelliJ调试工具。
如果你想打印堆栈跟踪,那么使用Thread.currentThread.getStackTrace()函数。