我将 C# 与 XNA 库一起使用,并且我的 Vector3 对象中出现了 NaN。当有问题的计算发生时(例如除以零),有没有办法闯入调试器?目前该程序只是继续运行。我正在使用 VS2008 专业版。在“用户未处理”列中选择了“异常”对话框中的所有异常。
编辑:为了澄清,我无法弄清楚错误的计算在哪里。这就是我希望调试器自动中断的原因。设置断点不是解决方案。
我将 C# 与 XNA 库一起使用,并且我的 Vector3 对象中出现了 NaN。当有问题的计算发生时(例如除以零),有没有办法闯入调试器?目前该程序只是继续运行。我正在使用 VS2008 专业版。在“用户未处理”列中选择了“异常”对话框中的所有异常。
编辑:为了澄清,我无法弄清楚错误的计算在哪里。这就是我希望调试器自动中断的原因。设置断点不是解决方案。
听起来您正在以某种方式处理异常(例如捕获通用异常)您可以做的是按 Ctrl+alt+E 调出异常对话框——确保选中异常的“抛出时”复选框( s) 你感兴趣
首先将 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
您可以设置一个仅在表达式的除数为 0 时才中断的条件断点。
我知道这是一个旧帖子,但是......
从经验来看,它几乎总是我错误使用的 Vector3.Normalize。
当我不确定它是否会是零长度时,我现在总是这样做
浮动 L = V.Length(); 如果(L!= 0.0)V /= L;
Normalize 中除以零应该给出异常,但事实并非如此。让我很头疼。