Romperse en C # depurador de división por cero
-
22-08-2019 - |
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.
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.