Java でスレッドの現在のスタック トレースを取得しようとしています。次の方法を調べました。
Java で現在のスレッドのスタック トレースを出力する最も簡単な方法の 1 つは、java.lang.Thread クラスの dumpStack() メソッドを使用することです。
スタック トレースを出力する別の方法は、Throwable クラスの printStackTrace() メソッドを使用することです。
より効率的なJavaのスレッドの現在のスタックトレースを取得できる他のアプローチはありますか?
以下は、私が設計したクラスです..
public class StackTraceExample
{
private static final Logger logger = Logger.getLogger(StringReplace.class.getName());
public static void main(String args[])
{
//calling a method to print stack trace further down
first();
}
public static void first()
{
second();
}
private static void second()
{
third();
}
private static void third()
{
//If you want to print stack trace on console than use dumpStack() method
System.err.println("Stack trace of current thread using dumpStack() method");
Thread.currentThread().dumpStack();
//This is another way to print stack trace from current method
System.err.println("Printing stack trace using printStackTrace() method of Throwable ");
new Throwable().printStackTrace();
//If you want stack trace as StackTraceElement in program itself than
//use getStackTrace() method of Thread class
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
//Once you get StackTraceElement you can also print it to console
System.err.println("displaying Stack trace from StackTraceElement in Java");
for(StackTraceElement st : stackTrace)
{
// System.err.println(st);
}
}
}
出力:-
Stack trace of current thread using dumpStack() method
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1249)
at test.StringReplace.third(StringReplace.java:38)
at test.StringReplace.second(StringReplace.java:31)
at test.StringReplace.first(StringReplace.java:27)
at test.StringReplace.main(StringReplace.java:23)
Printing stack trace using printStackTrace() method of Throwable
java.lang.Throwable
at test.StringReplace.third(StringReplace.java:42)
at test.StringReplace.second(StringReplace.java:31)
at test.StringReplace.first(StringReplace.java:27)
at test.StringReplace.main(StringReplace.java:23)
displaying Stack trace from StackTraceElement in Java