我正在使用C#和XNA库,我在我的Vector3对象中出现了NaNs。当有问题的计算发生时,有没有办法进入调试器(例如除以零)?目前该计划正在继续运行。我正在使用VS2008 Professional。 “例外”对话框中的所有例外都在“user-unhandled”列中选择。
编辑:为了澄清,我无法解决计算错误的地方。这就是我希望调试器自动中断的原因。设置断点不是解决方案。
答案 0 :(得分:4)
听起来你正在以某种方式处理异常(比如捕捉一般的异常)你可以做的是按Ctrl + alt + E以显示异常对话框 - 确保选中“何时抛出”复选框你感兴趣的例外
答案 1 :(得分:4)
首先将double / float除以零,得出Infinity / -Infinity取决于double是正还是负。只有零双/浮点数除以零才能得到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
答案 2 :(得分:3)
你可以设置conditional breakpoint只在表达式的除数为0时才会中断。
答案 3 :(得分:1)
我知道这是一个老帖子,但是......
从经验来看它几乎总是我误用的Vector3.Normalize。
当我不确定它是否为零长度时,我现在总是这样做
float L = V.Length(); if(L!= 0.0) V / = L;
在Normalize中除以零应该给出一个例外,但事实并非如此。让我头疼不已。