デバッグ印刷からスタックトレースを印刷する最も簡単な方法は何ですか?多くの場合、テスト中に、デバッグメッセージを引き起こす状況に至るまでのコールスタックを知りたいと思うでしょう。
8 に答える
log4j を使用している場合
Exception e = new Exception();
log.error("error here", e);
スタックトレースをログに出力します。
スタック トレースを String に保存する場合は、これを行うことができます。
String exception = "";
for (StackTraceElement element : e.getStackTrace())
exception += element.toString() + "\n";
e は明らかに例外です。
その上、デバッグ用のスタック トレースを取得するためだけに独自の Exception を自動生成するのは非常に奇妙に思えます。Eclipse を入手して、そのデバッグ モードを使用してください。本当に素晴らしいです。
任意の例外を作成するだけで、うまくいきます。
System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();
@jjnguy が言ったことと同様に、例外がない場合は、Thread.getStackTrace() を呼び出すこともできます。
try-catchブロックで例外をキャッチする必要があります。
e.getStackTrace();
これにより、StackTraceElement []が返され、これを解釈できます。
また:
e.printStackTrace()
スタックトレースを出力します。
現在のスタック トレースを stderr に単純に出力するには、次のように呼び出します。
Thread.dumpStack();
それ自体は単に呼び出します:
new Exception("Stack trace").printStackTrace();
stderr ではなくstdoutに出力するには、次のSystem.out
ように渡しprintStackTrace()
ます。
new Exception("Stack trace").printStackTrace(System.out);
自分で必要だったからです:
回答に触発されたように、スタックトレースまたはリフレクションを使用してメソッドの呼び出し元を見つけるにはどうすればよいですか? を使用してコール スタックを取得できます。
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
次に、興味のあるものを処理して印刷/ログに記録します。 を使用するよりも作業Thread.dumpStack()
が多くなりますが、より柔軟です。