【问题标题】:Code that detects its own bugs?检测自身错误的代码?
【发布时间】:2011-12-16 19:38:23
【问题描述】:

考虑以下代码sn-p:

int index = FindClosestIndex(frame);
if (_data[index].Frame == frame)
    return _data[index];
else
    return interpolateData(frame, _data[index - 1], _data[index]);

现在,在这种情况下,我在此代码块之前进行了一些检查,以确保 FindClosestIndex() 永远不会返回 0。这应该是不可能的。但是,FindClosestIndex 中的逻辑有些复杂,因此很可能在一些没有人预料到的罕见极端情况下尚未发现错误,即使我的代码是正确的,FindClosestIndex 也可能错误地返回 0。

如果它确实返回 0,我将在 _data[index - 1] 语句上收到 ArgumentOutOfRangeException。我可以让这个异常冒泡,但我宁愿这样做:

if (index == 0)
    throw new ApplicationLogicException("There is a bug that caused FindClosestIndex to return an int <= 0 when it shouldn't have.");

如果您的代码检测到错误状态,您会推荐这种抛出自定义异常的做法吗?遇到这种情况怎么办?

【问题讨论】:

    标签: exception fault-tolerance error-detection


    【解决方案1】:

    就我个人而言,我确实包含了这样的自定义异常。这就像避孕套的争论:拥有它而不需要它比需要它而不拥有它要好。如果在极少数情况下确实发生了这种情况,包括自定义异常消息将使跟踪逻辑错误变得更加容易,但您的可执行文件只是稍微大一点。否则,您的 ArgumentOutOfRangeException 可能发生在任何地方。添加异常所花费的时间远远超过在没有它的情况下跟踪错误所花费的时间。

    【讨论】:

      猜你喜欢
      • 2020-04-17
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 2018-05-17
      • 2015-09-09
      • 1970-01-01
      相关资源
      最近更新 更多