VS调试器错了吗?代码引发IndexOutOfRangeException:f++

本文关键字:IndexOutOfRangeException f++ 代码 调试器 错了 VS | 更新日期: 2023-09-27 17:48:53

为什么在下面代码的"f++"部分引发异常("IndexOutOfRangeException未被用户代码处理"):

for (int f = 0; f < gnf; f++)  
{  
    fieldNames[g] = grid.FieldName(f);  
}  

错误出现在代码的"fieldNames[g]=…"部分,我的算法应该是:

for (int f = 0; f < gnf; f++)  
{  
    fieldNames[f] = grid.FieldName(f);  
}  

(这不会崩溃。)但是,当运行错误的(顶部)代码时,调试器不会在"fieldNames[g]…"行显示异常。

我现在没有使用线程,所以我不认为这是"在线程程序中调试异常是自杀"的情况之一。

为什么调试器在错误的位置显示异常?优化还是什么?以前有没有其他人让调试器像这样"错误"?

VS调试器错了吗?代码引发IndexOutOfRangeException:f++

可能是优化器。您的构建设置为DEBUG还是RELEASE?

我也遇到过类似的调试问题,我认为这通常是因为调试(pdb)文件与代码不同步。这可能是由许多问题引起的,包括

  • 该文件已被修改,但无论出于何种原因,库的编译都没有进行。因此,.dll和.pdb文件不是最新的源代码
  • .pdb文件已过期,因为编译是在RELEASE安装程序中进行的
  • 该库存在于文件系统上的多个位置,并且当前的解决方案以某种方式设置为查看不同的.dll和.pdb文件

当调试信息都存储在.pdb文件中时,就会发生这种情况,如果该文件已过期,它将在Visual Studio中突出显示不正确的行。

如果所有项目都在一个解决方案中,并且引用设置正确,则重新启动Visual Studio通常可以解决此问题。(由于某种原因,编译可能没有正确进行,重新启动可以解决这个问题——对我来说似乎是这样…)