4

VisualVM のような監視ソフトウェアを使用せずに、プログラム内から、コードのどの行と実行中のスレッドがどのメソッドにあるかを出力できますか? スレッドを拡張する必要がありますか?

4

5 に答える 5

3

これが簡単なデバッグまたはエラー報告のためだけの場合は、次のことができます

new Exception().printStackTrace()

それよりも少し手の込んだものにしたい場合は、 を使用してオブジェクトThread.currentThread().getStackTrace()の配列を取得できます。StackTraceElementそれらを調べることで、現在の行番号を判断できます。

于 2012-08-04T01:45:17.717 に答える
2

Thread.dumpStack()スタックを出力するを使用するだけです(例外がキャッチされない場合と同様)。新しい例外を作成する必要はありません。

于 2012-08-04T03:52:12.350 に答える
2

ほぼすべてのロギング フレームワークを使用して、ほとんどがスレッド グループ/名前、クラス、メソッド、ファイル名、および行番号機能をサポートします。

于 2012-08-04T04:26:06.673 に答える
0

JDBをチェックアウトできます。このリンクは、同時実行の問題をデバッグするために使用する例を示しています。これはまた、その基本的な機能の一部を示しています。それはかなりまともで、すでに JAVA_HOME/bin にあるはずです。

別の方法は、JUCProfilerをチェックアウトすることです。私はこれを試したことはありませんが、かなりまともなようです。

于 2012-08-04T06:04:39.347 に答える