在VS.Net 2005中调试时断点没有连接

时间:2008-10-02 15:50:42

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

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

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

添加注意: 此解决方案位于TFS for Source Control中。如果我删除我的本地TFS存储库并从头开始从源代码控制中获取它,那么问题就会消失。我也试过卸载并重新安装Visual Studio。这也有时候有所帮助。这些事情在某些时候都表明这个问题不是直接造成的。

12 个答案:

答案 0 :(得分:8)

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

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

    1. 停止调试器
    2. 关闭IDE
    3. 关闭托管应用程序
    4. 核对obj和bin文件夹
    5. 重启IDE
    6. 重建项目
    7. 再次浏览“模块”窗口
    8. 一旦浏览到PDB文件的位置,符号状态就会更改为已加载的符号,现在您应该能够在代码中设置并捕获断行点。
    9. 来源:The breakpoint will not currently be hit. No symbols have been loaded for this document.

答案 1 :(得分:2)

答案 2 :(得分:1)

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

答案 3 :(得分:1)

构建配置是否设置为Release?

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

答案 4 :(得分:1)

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

如果您使用COM Interop with .NET,当可执行文件加载DLL时,DLL版本有时会出现问题。例如,如果您的每日构建编译出一个递增的内部版本号,但您的调试DLL具有较小的内部版本号,则可执行文件将不会加载调试DLL。要解决此问题,您需要扫描注册表中的HKEY_CLASSES_ROOT \ CLSID目录以获取.NET / COM组件的GUID / CLSID。在InProc32下,删除版本号高于调试DLL的条目。

同样,以上仅适用于.NET + COM Interop DLL。

答案 5 :(得分:1)

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

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

阅读post here和评论以解决问题。

答案 6 :(得分:0)

AviewAnew - 已经应MS技术人员的要求完成了这项工作。取消选中要求的源文件以匹配版本没有帮助。

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

您是否有以任何方式接触二进制文件的帖子构建步骤?如果是这样,这可能会混淆调试器并使其看起来像您的符号与exe / dll不匹配,因为大小/时间戳不正确。

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

您是否可以将代码单步执行到断点行而不是运行并等待它命中?你可以直接执行代码吗?