【问题标题】:Breakpoint not hooked up when debugging in VS.Net 2005在 VS.Net 2005 中调试时断点未连接
【发布时间】:2010-09-14 20:33:06
【问题描述】:

最近遇到这个问题...在 VS.Net 2005 中调试应用程序时,断点未连接。错误表示编译后的代码和运行的版本不一样,因此存在不匹配导致断点断开。

所有bin文件的清理解决方案并重新编译没有帮助。也不只是发生在一个盒子或一个人身上。

补充说明: 此解决方案位于 TFS for Source Control 中。如果我删除我的本地 TFS 存储库并从头开始从源代码控制中获取它,有时问题就会消失。我也试过卸载并重新安装 Visual Studio。这有时也有帮助。这两种方法有时都起作用的事实表明问题不是由任何一种直接引起的。

【问题讨论】:

    标签: c# debugging visual-studio-2005 breakpoints


    【解决方案1】:

    在选项 -> 调试中,您可以取消选中“要求源文件与原始版本完全匹配”,这可能会有所帮助。

    【讨论】:

    • 是在 MS 的要求下这样做的,但没有帮助。
    【解决方案2】:

    构建配置是否设置为发布?

    您是否引用了设置断点的外部 DLL?

    【讨论】:

    • 它设置为 DEBUG 并且没有外部 DLL - 它们都是本地项目。
    【解决方案3】:

    AviewAnew - 已应 MS 技术人员的要求这样做了。取消选中需要源文件以匹配版本没有帮助。

    Mike L - 配置设置为 DEBUG,现在有外部 DLL。使用除框架引用之外的所有本地项目。

    【讨论】:

      【解决方案4】:

      您确定 .pdb 文件与您正在运行的可执行文件位于同一文件夹中吗?确保两个文件的最后修改日期匹配,并且 VS 附加到该 exe(而不是其他)。

      【讨论】:

        【解决方案5】:

        您是否正在创建一个供外部可执行文件使用的 DLL 项目?您使用的是 .NET 还是 COM?

        如果您将 COM 互操作与 .NET 一起使用,则当可执行文件加载 DLL 时,DLL 版本有时会成为问题。例如,如果您的每日构建产生递增的构建号,但您的调试 DLL 的构建号较小,则可执行文件将不会加载调试 DLL。要解决此问题,您需要扫描注册表中的 HKEY_CLASSES_ROOT\CLSID 目录以查找 .NET/COM 组件的 GUID/CLSID。在 InProc32 下,删除版本号高于调试 DLL 的条目。

        同样,上述内容仅适用于 .NET + COM 互操作 DLL。

        【讨论】:

        • 它的 .Net 并且我没有创建由外部 exe 使用的 DLL 项目。
        【解决方案6】:

        您是否有任何涉及二进制文件的后期构建步骤?如果是这样,这可能会使调试器感到困惑,并使您的符号看起来与您的 exe/dll 不匹配,因为大小/时间戳不正确。

        【讨论】:

          【解决方案7】:

          在过去,我有时发现关闭编译器优化可以解决“丢失”断点,因为优化器已经(正确地)确定代码没有被调用,并将它们从编译版本中删除。

          这听起来确实是一个不同的问题,但可能值得确保在调试模式下关闭优化。 [项目/属性,构建设置选项卡]

          【讨论】:

          • 这些断点绝对应该被命中 - 禁用编译器优化没有影响。
          【解决方案8】:

          我过去也遇到过类似的问题。

          解决方法是关闭 Visual Studio 并删除“C:\WINDOWS\Microsoft.NET\Framework{framework version}\Temporary ASP.NET Files”下项目的临时 ASP.NET 生成的程序集文件,重新打开项目。

          阅读post here 和 cmets 来解决它。

          【讨论】:

          • 这不是一个 ASP.Net 项目,尽管它确实有 web 服务(它是一个智能客户端应用程序)。然而,断点不仅在 web 服务端被破坏,而且在 exe 和相关的 dll 中被破坏。
          【解决方案9】:

          确定在应用程序的任何位置,代码上都没有阻止代码被调试的 Debug 属性,例如 DebuggerHidden 或 DebuggerStepThrough?

          【讨论】:

          • 不,尽管您提出了一些非常好的建议,但这里没有类似的东西。 8)
          【解决方案10】:

          您能否单步执行您的代码直到断点所在的行,而不是运行并等待它命中?你可以单步执行代码吗?

          【讨论】:

          • 没有断点在工作,就好像代码是在 RELEASE 模式下编译的一样。
          【解决方案11】:

          也许这个建议可能会有所帮助:

          1. 在 Visual Studio 中进行调试时,单击“调试”>“Windows”>“模块”。 IDE 将停靠一个 Modules 窗口,显示已为您的项目加载的所有模块。
          2. 查找项目的 DLL,并检查其符号状态。
          3. 如果它显示符号已加载,那么您就是黄金。如果它显示类似无法找到或打开 PDB 文件,请右键单击您的模块,选择加载符号,然后浏览到 PDB 的路径。

          我发现有时需要:

          1. 停止调试器
          2. 关闭 IDE
          3. 关闭托管应用程序
          4. 核对 obj 和 bin 文件夹
          5. 重启IDE
          6. 重建项目
          7. 再次浏览“模块”窗口
          8. 浏览到 PDB 文件的位置后,符号状态应更改为已加载符号,您现在应该能够在代码行设置和捕获断点。

          来源:The breakpoint will not currently be hit. No symbols have been loaded for this document.

          【讨论】:

            【解决方案12】:

            【讨论】:

            • 有趣且有用,但不是导致我看到的问题的原因 - 尚未安装 IE8(甚至不认为它当时可用)。仍然 - 很好的参考,谢谢!
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-30
            • 1970-01-01
            • 2016-12-21
            • 2013-06-25
            • 2010-11-05
            • 1970-01-01
            相关资源
            最近更新 更多