12

デバッグ印刷からスタックトレースを印刷する最も簡単な方法は何ですか?多くの場合、テスト中に、デバッグメッセージを引き起こす状況に至るまでのコールスタックを知りたいと思うでしょう。

4

8 に答える 8

20

log4j を使用している場合

Exception e = new Exception();
log.error("error here", e);

スタックトレースをログに出力します。

于 2008-09-12T19:07:34.600 に答える
11

Thread.dumpStack();

于 2008-09-10T18:27:42.670 に答える
6

スタック トレースを String に保存する場合は、これを行うことができます。

String exception = "";
for (StackTraceElement element : e.getStackTrace())
   exception += element.toString() + "\n";

e は明らかに例外です。

その上、デバッグ用のスタック トレースを取得するためだけに独自の Exception を自動生成するのは非常に奇妙に思えます。Eclipse を入手して、そのデバッグ モードを使用してください。本当に素晴らしいです。

于 2008-09-11T11:20:31.987 に答える
4

任意の例外を作成するだけで、うまくいきます。

System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();
于 2008-09-10T18:06:44.703 に答える
3

@jjnguy が言ったことと同様に、例外がない場合は、Thread.getStackTrace() を呼び出すこともできます。

于 2008-09-10T18:07:18.913 に答える
2

try-catchブロックで例外をキャッチする必要があります。

e.getStackTrace();

これにより、StackTraceElement []が返され、これを解釈できます。

また:

e.printStackTrace()

スタックトレースを出力します。

于 2008-09-10T18:05:41.333 に答える
2

現在のスタック トレースを stderr に単純に出力するには、次のように呼び出します。

Thread.dumpStack();

それ自体は単に呼び出します:

new Exception("Stack trace").printStackTrace();

stderr ではなくstdoutに出力するには、次のSystem.outように渡しprintStackTrace()ます。

new Exception("Stack trace").printStackTrace(System.out);
于 2016-04-06T00:19:41.823 に答える
1

自分で必要だったからです:

回答に触発されたように、スタックトレースまたはリフレクションを使用してメソッドの呼び出し元を見つけるにはどうすればよいですか? を使用してコール スタックを取得できます。

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()

次に、興味のあるものを処理して印刷/ログに記録します。 を使用するよりも作業Thread.dumpStack()が多くなりますが、より柔軟です。

于 2009-11-16T14:51:05.010 に答える