在VS.Net 2005中调试时,断点没有连接
最近遇到了这个问题…在VS.Net 2005中调试应用程序时,断点没有连接。 错误表示编译的代码与正在运行的版本不同,因此存在导致断点断开的不匹配。
清理所有bin文件的解决方案并重新编译没有帮助。 不仅仅发生在一个盒子或人身上。
添加注意:此解决方案位于TFS for Source Control中。 如果我删除我的本地TFS存储库并从头开始从源代码控制中获取它,那么问题就会消失。 我也试过卸载并重新安装Visual Studio。 这也有点有帮助。 那些事情在某些时候都表明这个问题不是直接造成的。
也许这个建议可能会有所帮助:
- 在Visual Studio中进行调试时,单击Debug> Windows> Modules。 IDE将停靠模块窗口,显示已为项目加载的所有模块。
- 查找项目的DLL,并检查它的符号状态。
- 如果它说符号已加载,那么你就是金色的。 如果它显示无法找到或打开PDB文件,请右键单击模块,选择“加载符号”,然后浏览到PDB的路径。
我发现有时需要:
- 停止调试器
- 关闭IDE
- 关闭托管应用程序
- nuke obj和bin文件夹
- 重启IDE
- 重建项目
- 再次浏览“模块”窗口
- 一旦浏览到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?
你可以通过你的代码直到断点的行,而不是运行并等待它命中? 你可以直接执行代码吗?