C#静态数组绑定检查

时间:2013-12-06 16:37:57

标签: c# arrays static-analysis indexoutofboundsexception formal-verification

是否有一个C#工具可以静态地(不执行代码)检测到超出绑定的数组访问,即将引发IndexOutOfRangeException的数组访问。

谢谢。

编辑:是的,我知道理论上不可能在一般情况下(即,它是不可判定的)这样做,但这并不意味着它不可能做到在某些情况下(实际上,形式验证的整个领域是为理论上不可能的事物生成实用工具)。 (我不认为特别要求这个推荐:))

3 个答案:

答案 0 :(得分:2)

不,理论上这是不可能的。这是进行单元测试的; - )。

答案 1 :(得分:2)

正如托马斯和海因齐所说,这是不可判定的。您的问题的一部分是可解决的 - 您可以NGen(或JIT)您的.NET应用程序,并查找对IndexOutOfRangeException throw子例程的引用; MSIL - >本机编译器如果绝对肯定它不会发生,则会消除边界检查(以及IndexOutOfRangeExceptions)。

在实践中,这通常是像for (int i = 0; i < ar.Length; i++) { ar[i] ... }这样的代码,但它应该在许多应用程序中大大减少未确定的情况。

答案 2 :(得分:0)