首页 > 解决方案 > Visual Studio 调试器随机跳过行

问题描述

        string generatedCode = "";
        generatedCode += "            ";
        int enumFieldsLength = 12; // Set equal to number of spaces in current indentation

        for(int i = 0; i < dbTableList.Count; i++)
        { // enum
            generatedCode += dbTableList[i].DbField;
            if(i != dbTableList.Count - 1)
            {
                generatedCode += ",";

                enumFieldsLength += dbTableList[i].DbField.Length + 2; // 2 for the comma + space
                if(enumFieldsLength <= SourceCode.MAX_CHARACTERS_PER_LINE)
                {
                    generatedCode += " "; // Add space after trailing comma
                }
                else
                {
                    enumFieldsLength = 12;
                    generatedCode += "\r\n            "; // New line because exceeded maximum allowed characters per line
                }
            }
        }

我在这里有这个简单的代码。运行 Visual Studio 2019。Visual Studio 的行为很奇怪。在 else 条件中,调试器完全跳过了“enumFieldsLength = 12”。即使我在字符串连接语句之后移动它,它也会完全跳过它。此外,调试器标记中的当前行变成了一个奇怪的块。

在一个可能相关的注释中,相关的 if 语句不会让我选择代码行(它只是选择它下面的右括号)。选择左括号会很奇怪。 在此处输入图像描述

else里面也有类似的情况。enumFieldsLength = 12 选择显得很奇怪(在代码之前选择了一些空格),但它不会让我选择 generateCode += ...,它只会把我踢到右括号。 在此处输入图像描述

当我实际调试时,当前行指示器在这些行附近变得很奇怪。在此处输入图像描述

此外,即使我仍在 for 循环内,调试器也会在循环外标记片段。看看这张图片,调试器以一种毫无意义的方式突出显示了循环外的部分语句。 在此处输入图像描述

发生了什么事,我该如何解决这个问题?我有 ReSharper,但我尝试禁用它并没有帮助。我还尝试清理解决方案并清理每个单独的项目,重建。“优化代码”未选中。

标签: c#visual-studiovisual-studio-debugging

解决方案


我想到了。

我手动删除了 bin 和 obj 文件夹,然后手动重建了每个单独的项目。

另一方面,Visual Studio 在外部执行 git 操作时似乎会做一些奇怪的事情,比如随机删除 csproj 文件和 .sln 文件中的行。在我最近的 git 合并中,它看起来像是从 .sln 中删除了一个随机行。 在此处输入图像描述

我不是 100% 确定这条线导致它开始起作用(因为我在合并后做的其他事情工作正常,加上删除 bin 文件夹解决了它而没有我弄乱 sln),但不管我也恢复了那个改变. 我合并的人没有添加或删除任何文件,所以 sln 不应该改变(并且不在他们的分支上,这只是 Visual Studio 很奇怪)。


推荐阅读