Pregunta

Estoy usando C # con la biblioteca de XNA y yo estoy poniendo NaNs apareciendo en mis objetos vector3. ¿Hay una manera de entrar en el depurador cuando el cálculo infractor pasa (por ejemplo, una división por cero)? Actualmente, el programa simplemente sigue corriendo. Estoy usando VS2008 profesional. Todas las excepciones en el diálogo Excepciones son seleccionadas en la columna "-no controlada de usuario".

Edit: Para aclarar, que no pueden hacer ejercicio en el que el mal cálculo es. Esta es la razón por la que quiero depurador para romper automáticamente. Establecer puntos de interrupción no es una solución.

¿Fue útil?

Solución

En primer lugar la división de un doble / float por cero da Infinity / -Infinity dependiendo de si el doble es positivo o negativo. Sólo un doble cero / flotación dividido por cero da NaN. En cualquiera de los casos, se lanzará una excepción.

Usted debe ser capaz de utilizar puntos de interrupción condicionales para detectar cuando una determinada variable se establece en uno de estos valores. Tenga cuidado en la comprobación de NaN aunque, como 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

Otros consejos

Parece que usted está manejando la excepción de alguna manera (como una captura de una excepción genérica) Lo que puede hacer es pulsar Ctrl + Alt + E para abrir el diálogo de excepciones - asegúrese de comprobar la casilla de verificación "cuando se lanza" para la excepción (s) que le interesa

Se podría establecer un punto de interrupción condicional que sólo se rompe cuando el divisor de una expresión es 0 .

Sé que esto es una entrada antigua, pero .....

de la experiencia de sus casi siempre Vector3.Normalize que yo uso por error.

Cuando no estoy seguro de si va a ser cero longitud ahora siempre hago

flotador L = V.Length (); si (L! = 0.0)    V / = L;

división por cero en Normalizar debe dar una excepción pero no es así. Me causó una gran cantidad de rascarse la cabeza.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top