2008-09-10 7 views

答えて

8
+0

欠点は、dumpStack()がstderrに移動するだけで、例外やThread.getStackTrace()を使用した場合のように別の場所に送ることができないことです。 –

+4

ロギングを使用します。 stdout/stderrへの印刷は、OSのユーティリティと "Hello World"アプリケーションでのみ行うべきです。 –

2

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

e.getStackTrace(); 

これは、次に解釈できるStackTraceElement []を返します。また

e.printStackTrace() 

は...スタックトレースを出力します。ただ、任意の例外を作成

4

は私のためのトリックん:あなたは例外を持っていない場合、あなたも)(Thread.getStackTraceを呼び出すことができ、@jjnguyが言ったことと同様に

System.out.println("Oops, the bad thing happened"); 
new IllegalStateException().printStackTrace(); 
+0

jus Thread.getStackTrace()を使用します。 – jjnguy

+0

私は例外を作成していて投げていないので、このメソッドはIntelliJなどの一部のIDEで警告を発すると考えています。 同じロジックを持つThread.getStackTrace()メソッドをお勧めしますが、開発者からは隠されています。 –

+0

Thread.dumpStack()は単にstderrに送信したい方が簡単です(スタックトレース要素を自分自身でループする必要がありません)。 –

3

を。

4

あなたはこれを行うことができます文字列にスタックトレースを保存したい場合は、

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

ここで、eは明らかに例外です。

さらに、デバッグのためのスタックトレースを見つけるために独自の例外を自動的に生成するのは非常に奇妙です。 Eclipseを入手してデバッグモードを使用すると、本当に素晴らしいです。

+0

また、e.getCause()をステップ実行したり再帰したりして、それらすべてのスタックトレースを取得してはいけませんか? – slim

+0

私はあなたがこれを行うときに原因があるとは思わない。 – Chris

+0

複数の連結に対して 'String'の代わりに' StringBuilder'を使います。 – minipif

16

あなたは、log4jの

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

ログにスタックトレースを出力しますを使用している場合。私はそれを自分で必要な理由だけで

+0

+1 stdout/stderrを使用しない場合 –

1

:。

答えHow do I find the caller of a method using stacktrace or reflection?に触発されたとして、あなたは、あなたが処理して印刷/興味のあるものは何でもログイン

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

を使用してコールスタックを取得することができますより多くの仕事Thread.dumpStack()を使用するよりも柔軟性があります。

1

単にstderrに現在のスタックトレースを印刷するには、呼び出すことができます。

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

出力にSTDOUTではなくstderrに、にSystem.outを渡す:ちょうど呼び出し、自身

Thread.dumpStack(); 

printStackTrace()

new Exception("Stack trace").printStackTrace(System.out); 
関連する問題