4

try ブロックのどの行が例外をスローしているかを調べる方法はありますか?

私は次のようなEclipseでJavaに取り組んでいます

try {

  //Lots of code. Seriously. Lots.

} catch (Exception e){
  throw new OtherException();
}

try ブロックで例外が発生しています (その後、キャッチされます)。どこから投げられたのかを知るにはどうすればよいですか?

問題

  • スタック トレースには、OtherException の catch ブロック内の行のみが表示されます
  • try/catch ブロックの削除は簡単ではありません。コードをコンパイルするためにキャッチする必要がある、スローされると宣言された多くの例外があるからです。

これを行う簡単な方法があるべきだと感じています。

注: このコードは私が書いたものではありません ;-)

4

6 に答える 6

14

cause次のパラメーターを使用しますExceptions(ここを参照):

try {

  //Lots of code. Seriously. Lots.

} catch (Exception e){
  throw new OtherException(e); // Trick is here
}

このようにcauseして、スタックトレースでも例外を取得します。

于 2012-05-24T16:07:17.273 に答える
4

を使用できますthrow new OtherException(e);ドキュメントで説明されているように、このコンストラクターは、指定された原因で新しい例外を作成します

于 2012-05-24T16:09:37.340 に答える
4

Eclipse では、例外によってトリガーされるブレークポイントを設定できます。Java 例外ブレークポイントの追加を参照してください。

この特定のケースでは、「キャッチされた例外で中断する」がチェックされていることを確認する必要があります。

Eclipse がデバッガーに組み込まれると、多くのツールを自由に使用できるようになります。コール スタックが表示され、変数などを調べることができます。

于 2012-05-24T16:06:37.153 に答える
2

例外eをOtherExceptionスローするときは、コンストラクターで渡します。例外をスローする正確な行を含む完全なスタックトレースが得られます。

catch (Exception e) {
    throw new OtherException(e);
}

OtherExceptionをとるコンストラクターがない場合、Exceptionまたは次のThrowableことができます。

catch (Exception e) {
    OtherException o = new OtherException();
    o.initCause(e);
    throw o;
}
于 2012-05-24T16:09:37.857 に答える
2

スタックトレースを出力するか、デバッグモードで実行するだけです

e.printStackTrace()
于 2012-05-24T16:14:31.000 に答える
0

エラーメッセージをコンソールに出力してみることもできます。System.out.println(e.getMessage());

ただし、ブレークポイントは非常に便利です。コードをトレースして、catchブロックに到達したタイミングを正確に確認できるからです。

于 2012-05-24T16:10:25.190 に答える