C#仅在单步执行代码时出现调试错误

C#仅在单步执行代码时出现调试错误,c#,visual-studio,C#,Visual Studio,我的MonoGame应用程序在visual studio中单步执行代码时输出错误,但在运行代码时没有输出错误。我被难住了,想知道我是否违反了一些规则。因此,下面是有问题的代码: public class SpacialHash<T> { public Vector2 Size, CellSize; public HashCell<T>[,] Cells; public SpacialHash(Vector2

我的MonoGame应用程序在visual studio中单步执行代码时输出错误,但在运行代码时没有输出错误。我被难住了,想知道我是否违反了一些规则。因此,下面是有问题的代码:

    public class SpacialHash<T>
    {
        public Vector2 Size, CellSize;
        public HashCell<T>[,] Cells;

        public SpacialHash(Vector2 size, Vector2 cellsize)
        {
            Size = size;
            CellSize = cellsize;
            Vector2 hashSize = new Vector2((int)Math.Ceiling(size.X / cellsize.X), (int)Math.Ceiling(size.Y / cellsize.Y));

            Cells = new HashCell<T>[(int)hashSize.X, (int)hashSize.Y];
            for (int x = 0; x < hashSize.X; x++)
            {
                for (int y = 0; y < hashSize.Y; y++)
                {
                    Cells[x, y] = new HashCell<T>(this);
                }
            }
        }

        public HashCell<T> AddMember(Vector2 position, T member)
        {
            Vector2 cpos = new Vector2((int)Math.Floor(position.X / CellSize.X), (int)Math.Floor(position.Y / CellSize.Y));

            //Breakpoint is here
            if (cpos.X < Cells.GetLength(0) && cpos.Y < Cells.GetLength(1) && cpos.X >= 0 && cpos.Y >= 0)
            {
                //The following line of code causes the error while stepping through code
                HashCell<T> cell = Cells[cpos.X, cpos.Y];
                cell.AddMember(member);
                return cell;
            }
            return null;
        }
    }
公共类SpacialHash
{
公共向量2大小,单元大小;
公共哈希单元[,]单元;
公共空间哈希(向量2大小,向量2单元格大小)
{
大小=大小;
CellSize=CellSize;
Vector2 hashSize=新的Vector2((int)数学上限(size.X/cellsize.X),(int)数学上限(size.Y/cellsize.Y));
Cells=newhashcell[(int)hashSize.X,(int)hashSize.Y];
for(int x=0;x=0和&cpos.Y>=0)
{
//以下代码行在单步执行代码时导致错误
HashCell单元格=单元格[cpos.X,cpos.Y];
cell.AddMember(成员);
返回单元;
}
返回null;
}
}
函数应该找到成员应该在其中的单元格(通过计算CPO),这似乎工作正常。程序检查CPO以确保其在边界内,然后声明cell对象,将其分配给数组中存储在CPO的单元格的值。执行此操作的代码行将抛出以下错误:

System.ExecutionEngineException
  HResult=0x80131506
  Source=<Cannot evaluate the exception source>
  StackTrace:
<Cannot evaluate the exception stack trace>
System.executionEngineeException
HResult=0x80131506
来源=
堆栈跟踪:

我甚至不知道从哪里开始调试这个。奇怪的是,运行代码时不会抛出错误,只是在单步执行代码时。那么,这种行为是否仅仅是使用具有泛型类的多维数组造成的呢

谢谢,


Ozzie

我猜它绑定了错误版本的.net程序集,因为它甚至找不到异常类型(根据您显示的错误消息)

使用Fusion日志查看器(fuslogvw.exe)可以更好地确定是否存在故障。Fusion是.NET发布之前的原始代码名

访问该应用程序的最简单方法是启动Visual Studio命令提示符(确保以管理员身份运行,否则将无法进行更改)并键入

fuslogvw

这是一个非常丑陋的实用程序,但它可以帮助您确定.NET绑定是否失败

有关如何设置它的详细信息,请访问:

单击[设置]并按如下方式进行设置:

现在,每当.NET绑定库时,它都会将值写入融合日志。 返回到您的程序,在调试模式下运行它,并逐步完成代码,直到失败

失败时,返回Fusion日志查看器并单击查看日志按钮。
希望您能看到它绑定到的.NET DLL的版本。它可能是一个不同的版本,您将获得非调试运行的结果

重要


完成所有操作后,请不要忘记将设置设置回[Log Disabled],否则所有.NET程序都会写入整个系统的日志并降低计算机的速度。

此处的答案是否有帮助?我检查了这些答案,我没有检查优化代码,我清理并重建了我的解决方案,没有任何更改。