检测自己的错误的代码?

时间:2011-10-27 19:52:28

标签: exception fault-tolerance error-detection

请考虑以下代码段:

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.");

如果您的代码检测到错误状态,您会建议这种抛出自定义异常的做法吗?当你遇到这样的情况时,你会怎么做?

1 个答案:

答案 0 :(得分:1)

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