2011-03-02 11 views
2

ここではかなり複雑なプロジェクトがありますが、これには多くの計算が必要です。今私は結果がNaNである場合があります。多くのクラスが計算に関与しているため(NaNはゾンビのように広がる傾向があります)、その起源は作り出すのが難しいです。Eclipse:NotANumberで停止

私は、デバッグの実行を停止させる方法を知っているのですか?NaN? Javaは自動的にNaNで例外を発生させることをサポートしていないので、それは難しいでしょうが、おそらく完了していますが、私はそれを逃していますか?

おかげで、 アクセル

PS:私はDouble.isNaN(value)に条件付きブレークポイント(またはif文)を追加することができます知っているが、私は多くの場所でそうしなければなりません。 (実際には私が今やっていることです。)もっと良い選択肢があるのだろうかと思っています。

答えて

2

私は、Eclipseのデバッガの実行を停止させる方法を知っていますか?

私はそれを疑います。

通常のJavaの動作では、NaNが表示されたときに例外をスローしないため、デバッガは条件付きブレークポイントを生成する可能性のある各ステートメントに条件付きブレークポイントを挿入する必要があります。これは実行するのが複雑で、実行時には高価になります。あなたのユースケースはかなり珍しいものです。

Javaアサーションをいくつかの適切な場所でコードに追加する方がよいと思います。

+0

これまでのベスト・ソリューション:異なる場所でassert!Double.isNaN(value)を追加し、java.lang.AssertionErrorに例外ブレークポイントを追加すると、私が探しているものにかなり近くなります。 – Axel

0

私はより簡単な方法はないと思います。

IEEE-754(2008)の完全版には、例外処理メカニズム(Java/C#などの例外はありません)があります。 5つの例外があります。

  1. 無効な操作
  2. 部門が不正確な結果が

  • オーバーフローアンダーフロー
  • ゼロ
  • によって仕様もそれぞれのデフォルトの例外処理の戦略を持っていますこれらの例外は次のとおりです。

    1. のNaN
    2. 代替(approriately署名)無限
    3. 代替(approriately署名)無限
    4. を無視代替物は、標準的には、ユーザがあることをお勧めします

    を無視別の例外処理戦略(複数用意されています)、またはカスタム言語固有の戦略(Javaで例外を投げるなど)を使用して、これらのデフォルトを上書きすることができます。

    残念なことに、ほとんどの現代の言語は、この仕様の部分を完全に無視し、デフォルトの例外処理戦略は「十分に良い」と仮定しています。