2

我在这里有一个相当复杂的项目,涉及大量计算。现在我有一个结果是NaN. 由于计算涉及到很多类(NaN 往往像僵尸一样传播),因此很难确定其来源。

现在我想知道,有没有人知道让 eclipse 调试器停止执行的方法NaN?由于 Java 不支持在 上自动引发异常NaN,这会很困难,但也许它已经完成了,我错过了吗?

谢谢,阿克塞尔

PS:我知道我可以在 上添加条件断点(或 if 语句)Double.isNaN(value),但我必须在很多地方这样做。(事实上​​这就是我现在要做的。)只是想知道是否有更好的选择。

4

2 回答 2

2

现在我想知道,有没有人知道让 Eclipse 调试器停止执行命中 NaN 的方法?

我对此表示怀疑。

由于正常的 Java 行为是在出现 NaN 时不抛出异常,因此调试器需要在每个可能生成条件断点的语句中插入条件断点。这在运行时实现起来会很复杂,而且成本很高。而且您的用例非常不寻常。

我认为更好的方法可能是将 Java 断言添加到您的代码中的几个精心挑选的地方。

于 2011-03-02T09:33:11.517 回答
0

我认为没有更简单的方法。

顺便说一句,完整的 IEEE-754 (2008) 标准具有“异常处理”机制(与 Java/C#/等异常无关)。有5个例外:

  1. 无效操作
  2. 被零除
  3. 溢出
  4. 下溢
  5. 结果不准确

该规范还为这些异常中的每一个提供了默认的异常处理策略,它们是:

  1. 替换一个 NaN
  2. 替换一个(适当签名的)无穷大
  3. 替换一个(适当签名的)无穷大
  4. 忽视
  5. 忽视

该标准还建议用户能够覆盖这些默认值,使用另一种异常处理策略(提供了几种),或使用自定义语言特定策略(例如在 Java 中抛出异常)。

不幸的是,几乎所有现代语言都完全忽略了规范的这一部分,并假设默认的异常处理策略“足够好”。

于 2011-03-02T09:46:18.617 回答