代码之家  ›  专栏  ›  技术社区  ›  Martin Stone

闯入C#调试器进行除零

  •  3
  • Martin Stone  · 技术社区  · 17 年前

    我使用C#和XNA库,在我的Vector3对象中出现了NaN。当发生违规计算时(例如除以零),是否有方法闯入调试器?目前,该程序仍在继续运行。我使用的是VS2008专业版。“例外”对话框中的所有例外都在“用户未处理”列中选择。

    4 回复  |  直到 17 年前
        1
  •  4
  •   Rowland Shaw    17 年前

    首先,将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
  •  4
  •   Paul Ruane    17 年前

    听起来你是在以某种方式处理异常(比如捕获通用异常)你能做的就是按Ctrl+alt+E打开异常对话框——确保选中你感兴趣的异常的“何时抛出”复选框

        3
  •  3
  •   Andrew Hare    17 年前

    你可以设置一个 conditional breakpoint

        4
  •  1
  •   Gary    15 年前

    我知道这是一篇旧文章,但是。....

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

    浮点数L=V.长度(); 如果(L!=0.0)

    在Normalize中除以零应该会给出一个例外,但它没有。这让我很头疼。