Взлом в C # отладчик для деления на ноль - PullRequest
3 голосов
/ 01 апреля 2009

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

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

Ответы [ 4 ]

4 голосов
/ 01 апреля 2009

Во-первых, деление double / float на ноль дает Infinity / -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
4 голосов
/ 01 апреля 2009

Звучит так, будто вы как-то обрабатываете исключение (например, перехватывает универсальное исключение). Что вы можете сделать, это нажать Ctrl + Alt + E, чтобы открыть диалоговое окно исключений - убедитесь, что вы установили флажок «когда выброшено» для исключение (я) вы заинтересованы в

3 голосов
/ 01 апреля 2009

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

1 голос
/ 17 апреля 2011

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

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

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

float L = V.Length (); если (L! = 0.0) V / = L;

деление на ноль в Normalize должно давать исключение, но это не так. Вызвала у меня много головных царапин.

...