Domanda

Sto usando C # con la libreria XNA e sto ottenendo NaNs saltar fuori nei miei oggetti Vector3. C'è un modo per passare al debugger quando il calcolo offensivo accade (ad esempio una divisione per zero)? Attualmente il programma appena continua a funzionare. Sto usando VS2008 Professional. Tutte le eccezioni nella finestra di dialogo Eccezioni vengono selezionate nella colonna "user-gestita".

Modifica: Per chiarire, non riesco a capire dove il calcolo è male. Questo è il motivo per cui voglio che il debugger per rompere automaticamente. Impostazione punti di interruzione non è una soluzione.

È stato utile?

Soluzione

Innanzitutto dividendo un letto / galleggiante per zero dà Infinity / -Infinity seconda se la doppia è positivo o negativo. Solo uno zero doppia / float diviso per zero dà NaN. In entrambi i casi, verrà generata un'eccezione.

Si dovrebbe essere in grado di utilizzare i punti di interruzione condizionali per rilevare quando una particolare variabile viene impostata su uno di questi valori. Fare attenzione quando si controlla per NaN se, come 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

Altri suggerimenti

Sembra che tu stia gestire l'eccezione in qualche modo (come una cattura di un Exception generico) Che cosa si può fare è premere CTRL + ALT + E per aprire la finestra di dialogo delle eccezioni - assicuratevi di controllare la casella di controllo "quando viene lanciato" per l'eccezione (s) che ti interessa

Si potrebbe impostare un breakpoint condizionale che solo pause quando il divisore di un'espressione è 0 .

So che questo è un vecchio post, ma .....

per esperienza la sua quasi sempre Vector3.Normalize che io uso per errore.

Quando non sono sicuro se sarà pari a zero lunghezza Io ora faccio sempre

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

divisione per zero in Normalize dovrebbe dare un'eccezione ma non è così. mi ha causato un sacco di testa di graffiare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top