没有数组访问权限的IndexOutOfRangeException

时间:2012-07-18 20:30:59

标签: c# stack-trace

我有一个IndexOutOfRangeException的客户报告,但报告的行号没有数组访问权限!该行的形式为:

using (XyzConnection conn = new XyzConnection(anObject.aProperty.anotherProperty))

XyzConnectionanObject等由替换名称组成,但构造基本相同。

以上内容可以抛出IndexOutOfRangeException吗?

数组访问(和异常)是否可能在从上面一行调用的某些代码中,即构造函数或其中一个属性getter?如何识别正确的位置?

我应该提一下,在开发环境中无法重现该问题,我无法在客户的计算机上安装Visual Studio。

2 个答案:

答案 0 :(得分:2)

  

上面会抛出IndexOutOfRangeException吗?

该行本身不能抛出异常。

XyzConnection构造函数方法中的一些代码可能正在执行此操作,或者anObject.aProperty的属性getter可能会抛出它,或者aProperty.anotherProperty的属性getter也可能抛出。我的赌注是它是财产获取者之一。

它们可能被JIT编译器内联,因此无论你有什么PDB,你都不会在堆栈跟踪中看到它们。这实际上很常见,因为属性吸气剂通常很小而且简单,这使它们成为内联的理想候选者。

我建议对这两个属性getter进行可靠的代码审查,然后是XyzConnection构造函数

答案 1 :(得分:0)

首先想到的是PDB与正在使用的DLL版本不匹配。关于索引超出范围异常的代码行提示没有任何内容。如果没有看到围绕该调用的代码以及构造函数声明本身,我怀疑人们可以给予很多帮助。

另外还要检查误导性行号,如果代码使用了try / catch块,请确保重新引发异常的catch块使用“throw;”不是“扔前”; (其中ex是捕获的异常。)这会导致重新生成异常跟踪堆栈。 (既耗时又覆盖可能有用的信息。)