3

コードを変更せずに、catch ブロック内の例外のスタック トレースを出力する Java の方法はありますか。デバッグ用のすべての例外のスタック トレースを生成するために使用できる JVM arg があると言われましたが、これに関するドキュメントは見つかりませんでした。これに対して私が考えることができる唯一の解決策は、aspectj を使用して、作成された例外にアスペクトを作成し、スタック トレースを出力することです。側面よりも優れた解決策があることを望んでいました。

ありがとう、スティーブ。

--編集-- だから私が知りたいのは、私がこのコードを持っているとしましょう: } catch (Exception e) { //例外を無視する }

呼び出しが行われていない場合でも、 e.printStackTrace() を見たいと思います。これは、私が目にしている jvm クラッシュのデバッグに役立ち、多くのエラー隠蔽が進行中です。

4

2 に答える 2

2

Marko Topolnik が言ったように、例外をログに記録するには少し手間がかかるかもしれませんが、カスタムのキャッチされていない例外ハンドラーを実装して、キャッチされていない例外で好きなことを行うこともできます。

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    private final Logger log = Logger.getLogger("EXCEPTION");

    public void uncaughtException(final Thread t, final Throwable e) {
        log.logp(Level.SEVERE, "EXCEPTION", "", "Unhandled exception in thread " + t.getName() + ": ", e);
    }
});
于 2012-05-09T20:36:30.450 に答える
1

より良い解決策は、未処理の例外に対してのみ存在します。正常に機能しているコード内で発生した例外をログに記録するための第一級のサポートはありません 。可能な場合は、アスペクトを試してThrowableコンストラクター呼び出しをインターセプトすることをお勧めします。可能であれば、例外をインスタンス化しても例外をスローする必要がないため、誤検知が発生する可能性があります。

于 2012-05-09T19:13:42.890 に答える