【问题标题】:Visual Studio 2008 : Step to next line is very slow when debugging managed codeVisual Studio 2008:调试托管代码时,下一行的步骤非常慢
【发布时间】:2009-11-30 17:43:59
【问题描述】:

当通过 F10 逐行执行我的 C# 代码时,调试器需要一秒钟以上才能到达下一行。

我尝试删除所有监视和断点,但这没有任何区别。

这正常吗?这种情况已经很久了,所以我什至不记得这是否更好。我的开发计算机是四核机器,没有后台任务活动,并且剩余大量 RAM。

如果不正常,我还能尝试什么?它仍然可以使用,但用户界面不那么缓慢会很棒......

【问题讨论】:

    标签: c# .net asp.net visual-studio-2008 debugging


    【解决方案1】:

    可能发生的情况是调用堆栈帧中有一个变量,该变量具有昂贵的 .ToString 方法。在 2008 年,调用堆栈窗口的数据在每一步都会重建,无论该窗口是否实际可见。构建此窗口的一部分将对出现在参数列表中的值调用 .ToString,如果它们具有被覆盖的 .ToString。尝试禁用隐式 .ToString 调用,看看是否能解决问题。

    • 工具 -> 选项 -> 调试器
    • 取消选中“启用隐式 .ToString 调用”

    【讨论】:

    • 在 Visual Studio 2010 中,调用堆栈窗口似乎只有在它实际可见时才会重建。禁用隐式 ToString 调用的另一种方法是右键单击调用堆栈窗口并取消选中“显示参数值”。
    • @Phil,这是我们在 Beta2 之前所做的性能更改。
    • 谢谢!!我的问题实际上是由我的一个类上的 DebuggerDisplayAttribute 过于密集引起的。我将逻辑移到 ToString() 方法中,并且速度要快得多。很高兴知道是财产价值计算使事情变慢了。谢谢!!
    【解决方案2】:

    我发现,如果您可以选择调试非托管代码,即使您只调试托管代码,调试器也可能需要一段时间才能在各行之间切换。尝试关闭该选项(项目 > 属性 > 调试 > 启用调试器 > 启用非托管代码调试)。

    【讨论】:

    • +1 上次我在 Visual Studio 中遇到缓慢的步进,这就是原因
    • 听起来不错,但我究竟在哪里可以找到这个选项?我在项目设置中的任何地方都没有看到它。
    • 我相信是在调试组下,但是我在家里查不出来。此外,此选项在 Visual C# Express 中可能不可用。
    • 我在 Visual Studio Team System 上,但在 ASP.NET Web 项目设置中没有调试组。也许你的意思是工具 -> 选项 -> 调试 -> 即时 -> 本机?我刚刚尝试禁用它,但 id 似乎没有任何效果。
    • 此选项可用于 Windows 窗体和类库项目,位于 项目 > 属性 > 调试 > 启用调试器 > 启用非托管代码调试下。这似乎不适用于 Web 项目,至少在项目属性下不可用。
    【解决方案3】:

    我尝试了以上所有方法。取消选中“在源代码中显示线程”按钮修复它。

    【讨论】:

      【解决方案4】:

      在我的例子中,禁用“在一个进程中断时中断所有进程”(工具/选项/调试器)将“跨步”的​​时间从 2-3 秒减少到几分之一秒。

      我不知道为什么这个选项会对单步执行产生如此大的影响。 顺便说一句,如果您使用的线程不相互独立,我想禁用此选项可能会导致问题。

      【讨论】:

      • 我遇到了同样的问题。谢谢。我要调查一下。
      • 这解决了我在 VS2010 中调试缓慢的问题。
      【解决方案5】:

      我曾经经历过缓慢的调试,因为我设置了 VS 以在不再存在的网络共享上查找 pdb 文件。

      在这里检查:工具 - 选项 - 调试 - 符号 - 符号文件 (.pdb) 位置

      【讨论】:

        【解决方案6】:

        如果“自动”窗口打开,我听说过这种问题。尝试关闭它,看看您的性能是否有所提高。

        如果您还没有安装,您可能还应该安装"Visual Studio 2008 SP1 debugging and breakpoint" 补丁。请注意,此补丁位于 SP1 之上。补丁的文档并没有专门解决您看到的缓慢问题,但它是一个相当大的补丁,您可能会很幸运。

        【讨论】:

          【解决方案7】:

          关闭Tools > Options > Debugging > General中的启用地址级调试选项。
          这对我产生了巨大的影响。

          【讨论】:

            【解决方案8】:

            你设置了很多 Watch 表达式吗?它们将在每一步之间进行评估,如果它们需要时间来运行,你会在步进时注意到它的延迟。

            【讨论】:

            • 不,我已经删除了所有手表以确保不是问题所在。
            【解决方案9】:

            我在停止 C# 调试后经历了 10 秒的延迟,然后才能再次开始 C# 调试。 VS2008 将在此期间挂起,无法点击。我在 Project Properties -> Debug 中禁用 Visual Studio 托管进程后,现在有 0 秒的延迟。

            【讨论】:

              猜你喜欢
              • 2012-02-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-01-31
              • 1970-01-01
              • 1970-01-01
              • 2012-09-16
              相关资源
              最近更新 更多