Question

J'utilise C # avec la bibliothèque XNA et je suis en train de NaN culture dans mes objets Vector3. Y at-il un moyen de briser dans le débogueur lorsque le calcul incriminé se produit (par exemple une division par zéro)? Actuellement, le programme continue juste en cours d'exécution. J'utilise VS2008 Professional. Toutes les exceptions dans la boîte de dialogue des exceptions sont sélectionnées dans la colonne « -unhandled utilisateur ».

Edit: Pour clarifier, je ne peux pas travailler où le mauvais calcul. Voilà pourquoi je veux que le débogueur pour rompre automatiquement. Réglage des points d'arrêt ne sont pas une solution.

Était-ce utile?

La solution

Tout d'abord divisant un double / flotteur par zéro donne Infinity / -Infinity selon que la double est positif ou négatif. Seul un double zéro / flotteur divisé par zéro donne NaN. Dans les deux cas, aucune exception ne sera levée.

Vous devriez être en mesure d'utiliser pour détecter points d'arrêt conditionnels quand une variable particulière se prépare à une de ces valeurs. Soyez prudent lors de la vérification NaN si, comme 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

Autres conseils

Sons comme vous manipulez l'exception d'une certaine manière (comme une interceptant une exception générique) Qu'est-ce que vous pouvez faire est d'appuyer sur Ctrl + Alt + E pour afficher la boîte de dialogue des exceptions - assurez-vous que vous cochez la case « lors de la levée » case l'exception (s) qui vous intéresse

Vous pouvez définir une point d'arrêt conditionnel que seules pauses lorsque le diviseur d'une expression est 0 .

Je sais que c'est un ancien poste, mais .....

de l'expérience de ses presque toujours Vector3.Normalize que j'utilise par erreur.

Quand je ne suis pas sûr que ce sera une longueur nulle que je fais maintenant toujours

flotteur L = V.Length (); si (L! = 0,0)    V / = L;

diviser par zéro Normaliser devrait donner une exception, mais il ne fonctionne pas. Causé moi beaucoup de gratter la tête.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top