3

我将 C# 与 XNA 库一起使用,并且我的 Vector3 对象中出现了 NaN。当有问题的计算发生时(例如除以零),有没有办法闯入调试器?目前该程序只是继续运行。我正在使用 VS2008 专业版。在“用户未处理”列中选择了“异常”对话框中的所有异常。

编辑:为了澄清,我无法弄清楚错误的计算在哪里。这就是我希望调试器自动中断的原因。设置断点不是解决方案。

4

4 回答 4

4

听起来您正在以某种方式处理异常(例如捕获通用异常)您可以做的是按 Ctrl+alt+E 调出异常对话框——确保选中异常的“抛出时”复选框( s) 你感兴趣

于 2009-03-31T20:30:40.163 回答
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
于 2009-03-31T20:36:41.583 回答
3

您可以设置一个仅在表达式的除数为 0 时才中断的条件断点。

于 2009-03-31T20:32:09.457 回答
1

我知道这是一个旧帖子,但是......

从经验来看,它几乎总是我错误使用的 Vector3.Normalize。

当我不确定它是否会是零长度时,我现在总是这样做

浮动 L = V.Length(); 如果(L!= 0.0)V /= L;

Normalize 中除以零应该给出异常,但事实并非如此。让我很头疼。

于 2011-04-17T01:48:17.667 回答