0

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

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

XyzConnection, anObject, 等由替换名称组成,但结构基本相同。

以上本身可以抛出IndexOutOfRangeException吗?

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

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

4

2 回答 2

2

以上本身可以抛出IndexOutOfRangeException吗?

该行本身不能引发异常。

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

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

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

于 2012-07-19T00:13:55.197 回答
0

首先想到的是 PDB 与正在使用的 DLL 版本不匹配。这行代码没有任何提示索引超出范围异常。在没有看到围绕该调用的代码和构造函数声明本身的情况下,我怀疑人们可以提供多少帮助。

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

于 2012-07-18T21:44:53.930 回答