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

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

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

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

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

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

我发现有时需要:

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

来源: 断点当前不会被击中。 没有为此文档加载任何符号。

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

构建配置是否设置为Release?

你有一个引用断点的外部DLL的引用吗?

您是否正在创建由外部可执行文件使用的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。

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

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

阅读此处的post和评论以解决它。

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

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

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

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

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

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

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

你可以通过你的代码直到断点的行,而不是运行并等待它命中? 你可以直接执行代码吗?