Вопрос

Я использую C # с библиотекой XNA, и я получаю NAN, появляющиеся в моих объектах Vector3.Есть ли способ проникнуть в отладчик, когда происходит некорректное вычисление (напримерделение на ноль)?В настоящее время программа просто продолжает работать.Я использую VS2008 Professional.Все исключения в диалоговом окне Исключения выбираются в столбце "необработанные пользователем".

Редактировать:Чтобы уточнить, я не могу понять, где находится неверный расчет.Вот почему я хочу, чтобы отладчик автоматически прерывался.Установка точек останова - это не решение.

Это было полезно?

Решение

Во-первых, деление double / float на ноль дает Бесконечность /-Infinity в зависимости от того, является double положительным или отрицательным.Только нулевое значение double / float, деленное на ноль, дает 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

Другие советы

Похоже, вы каким-то образом обрабатываете исключение (например, перехватываете общее исключение) Что вы можете сделать, это нажать Ctrl + alt + E, чтобы вызвать диалоговое окно исключений - убедитесь, что вы установили флажок "при выбросе" для интересующих вас исключений

Вы могли бы установить условная точка останова это прерывается только тогда, когда делитель выражения равен 0.

Я знаю, что это старый пост, но.....

по опыту, это почти всегда Vector3.Normalize, который я использую по ошибке.

Когда я не уверен, будет ли это нулевая длина, я теперь всегда это делаю

поплавок L = V.Длина();если(L != 0,0) V /= L;

деление на ноль в Normalize должно дать исключение, но это не так.Из-за этого я часто чесал голову.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top