【问题标题】:Visual Studio debugger problemVisual Studio 调试器问题
【发布时间】:2010-03-03 15:55:58
【问题描述】:

在 Visual Studio 2008 中,调试大约 1-2 分钟后,当我按 F10(Step Over)时,调试器挂起,Visual Studio 冻结 5-10 秒,然后转到下一行。然后无论我做什么(F10、F5、F11 等),调试器都会继续执行,就好像我按下了 F5 并且我正在调试的所有表单都关闭了一样。我总是必须重新启动应用程序。

重现非常困难,而且每次我想调试某些东西时都不会发生。有人有解决办法吗?

编辑:我设法用以下代码重现了我的问题:

static void Main(string[] args)
{
   XElement e = new XElement("root");
   Test(e, 0);
}

static void Test(XElement parentElement, int i)
{
   if (i < 1000)
   {
      XElement element = new XElement("element");
      parentElement.Add(element);
      Test(element, ++i);
   }
}

你需要在"XElement element = new XElement("element");"这一行放置一个条件断点条件为“i == 999”。然后启动程序,等待 2-3 秒,然后在“parentElement.Add(element);”行放置正常断点。现在 VisualStudio 冻结,无法调试。在 WinForm 应用程序中,它会关闭按 F10 后打开的所有表单。

但我发现如果我在“工具->选项->调试”中禁用调试选项“在变量窗口中的对象上调用字符串转换函数”,我可以调试。它很慢,但至少 VisualStudio 不会冻结。有谁知道它为什么这样做?因为我不想禁用这个选项,没有它调试真的很烦。

我还注意到,如果我只在 main 方法的末尾放置一个断点,与在递归方法中设置条件断点相比,代码运行得非常快。

【问题讨论】:

  • 你能在另一个系统上重新安装你的操作系统和 VS 并在那里尝试你的调试吗?我怀疑其他软件/配置/硬件,而不是直接的 VS 问题。
  • 我不这么认为,因为它在我同事的电脑上也出现了同样的问题,而且他们中的一些人的操作系统不同
  • 你有很多个断点吗?

标签: visual-studio visual-studio-2008 debugging


【解决方案1】:

尝试删除存储调试/断点信息的解决方案用户选项文件 (.suo)。您将丢失所有解决方案用户设置,例如断点位置。当您遇到“有趣”的调试事件时,首先要尝试此操作,因为此文件可能会损坏。

如果这不能解决问题,那么您还有其他问题,例如线程问题、过多的内存碎片、垃圾收集问题、dispose/finalize 问题等等。

【讨论】:

    【解决方案2】:

    我在另一个 Stackoverflow 线程上找到了这个问题的答案。这个问题有一个 MS hotfix

    【讨论】:

    • 很多cmets说这个修复什么都解决不了=(
    【解决方案3】:

    我发现每当我将不存在的远程 unc 共享添加到符号目录列表中时,都会出现这样的减速。

    尝试转到 Tools -> Options -> Debugging -> Symbols 并确保所有该列表中的目录确实存在。

    但是,我不知道这将如何导致您的程序在此之后继续。

    【讨论】:

      【解决方案4】:

      不确定我是否遇到过这种情况,但如果我是你,如果你没有,请删除你的 bin 文件夹,然后重建你的项目。然后运行干净的解决方案以确保安全。有时,您的 PDB 过时可能会发生一些奇怪的事情,因此您需要清除它们。

      此外,如果您调用外部程序集,请将它们删除并重新附加,以确保您拥有最新的程序集。

      【讨论】:

      • 不,不幸的是,这似乎没有帮助
      【解决方案5】:

      正如您所描述的,我遇到了完全相同的问题。 MS 修补程序解决了这个问题,现在我每次安装 2008 VS 时都会安装此修补程序。

      【讨论】:

      • 网页上很多cmets说修复根本没有帮助=(
      • 确保在应用修补程序后删除所有项目的 bin/obj 文件夹
      【解决方案6】:

      【讨论】:

        【解决方案7】:

        我知道这是一个旧线程,但在我的情况下,这是在调试 Excel 加载项时发生的。

        问题是我的断点位于后台线程中,并且在我的监视窗口中,我对 Excel 中的 ActiveWorkbook 进行了旧检查。与许多其他调用一样,该调用只应发生在 Excel 的主线程上。

        一旦我取下那只手表,它又可以正常调试了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-04
          • 1970-01-01
          • 2020-02-04
          相关资源
          最近更新 更多