3

XNAライブラリでC#を使用していますが、Vector3オブジェクトでNaNが発生しています。問題のある計算が発生したときにデバッガーに侵入する方法はありますか(たとえば、ゼロ除算)?現在、プログラムは実行を継続しています。VS2008Professionalを使用しています。[例外]ダイアログのすべての例外は、[ユーザー未処理]列で選択されています。

編集:明確にするために、私は悪い計算がどこにあるのか理解できません。これが、デバッガーを自動的に中断させたい理由です。ブレークポイントの設定は解決策ではありません。

4

4 に答える 4

4

なんらかの方法で例外を処理しているように聞こえます(一般的な例外をキャッチするなど)。Ctrl+ Alt + Eを押して例外ダイアログを表示します。例外の[スローされたとき]チェックボックスをオンにしてください( s)あなたが興味を持っている

于 2009-03-31T20:30:40.163 に答える
4

最初に double/float をゼロで除算すると、double が正か負かに応じて Infinity/-Infinity が得られます。ゼロ倍精度浮動小数点数をゼロで除算した場合のみ、NaN が返されます。いずれの場合も、例外はスローされません。

条件付きブレークポイントを使用して、特定の変数がこれらの値のいずれかに設定されるタイミングを検出できるはずです。ただし、NaN != NaN であるため、NaN をチェックするときは注意してください。

double a = double.NaN;
Console.Out.WriteLine(a == double.NaN); // false
Console.Out.WriteLine(a == a); // false
Console.Out.WriteLine(double.IsNaN(a)); // true
于 2009-03-31T20:36:41.583 に答える
3

式の除数が 0 の場合にのみ中断する条件付きブレークポイントを設定できます。

于 2009-03-31T20:32:09.457 に答える
1

これが古い投稿であることは知っていますが.....

経験上、ほぼ常に Vector3.Normalize を誤って使用しています。

長さがゼロになるかどうかわからないときは、今では常にそうしています

float L = V.Length(); if(L != 0.0) V /= L;

Normalize でゼロ除算すると例外が発生するはずですが、そうではありません。頭をひっかきました。

于 2011-04-17T01:48:17.667 に答える