我有一个IndexOutOfRangeException
的客户报告,但报告的行号没有数组访问权限!该行的形式为:
using (XyzConnection conn = new XyzConnection(anObject.aProperty.anotherProperty))
XyzConnection
,anObject
等由替换名称组成,但构造基本相同。
以上内容可以抛出IndexOutOfRangeException
吗?
数组访问(和异常)是否可能在从上面一行调用的某些代码中,即构造函数或其中一个属性getter?如何识别正确的位置?
我应该提一下,在开发环境中无法重现该问题,我无法在客户的计算机上安装Visual Studio。
答案 0 :(得分:2)
上面会抛出IndexOutOfRangeException吗?
该行本身不能抛出异常。
XyzConnection
构造函数方法中的一些代码可能正在执行此操作,或者anObject.aProperty
的属性getter可能会抛出它,或者aProperty.anotherProperty
的属性getter也可能抛出。我的赌注是它是财产获取者之一。
它们可能被JIT编译器内联,因此无论你有什么PDB,你都不会在堆栈跟踪中看到它们。这实际上很常见,因为属性吸气剂通常很小而且简单,这使它们成为内联的理想候选者。
我建议对这两个属性getter进行可靠的代码审查,然后是XyzConnection
构造函数
答案 1 :(得分:0)
首先想到的是PDB与正在使用的DLL版本不匹配。关于索引超出范围异常的代码行提示没有任何内容。如果没有看到围绕该调用的代码以及构造函数声明本身,我怀疑人们可以给予很多帮助。
另外还要检查误导性行号,如果代码使用了try / catch块,请确保重新引发异常的catch块使用“throw;”不是“扔前”; (其中ex是捕获的异常。)这会导致重新生成异常跟踪堆栈。 (既耗时又覆盖可能有用的信息。)