断点无法绑定 - Visual Studio 2015
Posted
技术标签:
【中文标题】断点无法绑定 - Visual Studio 2015【英文标题】:Breakpoint Failed to Bind - Visual Studio 2015 【发布时间】:2015-10-22 08:27:02 【问题描述】:我刚刚从 Visual Studio 2013 升级到 2015,现在遇到断点问题。
断点实际上会起作用,如果我在调试时设置一个,我会得到错误:
断点绑定失败。
任何帮助将不胜感激。我正准备放弃2015年并回去。
【问题讨论】:
【参考方案1】:我有同样的问题,但有不同的解决方案。 请注意,我已更新到 VS 2015 Update 1,但问题仍然存在。
在以前版本的 VS 中,启动调试会自动触发在调试模式下构建。但在 VS2015 中则不然。
因此,如果您的上一个构建处于发布模式,并且您尝试调试,断点将不起作用。
您必须手动先在调试模式下构建,然后再开始调试。
【讨论】:
这不是很奇怪的行为吗?它可以被认为是一个错误吗? 安装 Microsoft Visual Studio 2015 Update 3 的更新 (KB3165756) 为我修复了之前出现“断点无法绑定”的调试问题。 C# 视图中的错误 这实际上很好 :) 我忘记了发布版本处于活动状态并且正在经历非常奇怪的调试会话,直到阅读本文我记得激活调试回来并且一切都“正常”。 我有一个奇怪的经历。我不得不将构建设置为“发布”,构建,然后“调试”并再次构建。 @TolgaEvcimen 鉴于 2 年多后,截至 VS 15.5.6,行为仍然相同,我会说 MS 不认为这是一个错误。就个人而言,我会发现恢复到自动触发调试构建的旧行为更合乎逻辑。或者至少发出警告。【参考方案2】:我遇到了同样的问题。
我解决了它在项目属性“构建”选项卡中禁用“优化代码”选项。
【讨论】:
这个问题最终还是回到了我的一个项目上。无论如何,更新 1 现在已经发布,所以希望能够清理所有内容visualstudio.com/en-us/news/vs2015-update1-vs.aspx 这不是 Debug 构建的重点吗?我建议不要关闭“优化代码”的发布版本。 当我查看配置管理器时,我切换到调试解决方案,发现一些项目被错误地设置为发布。这意味着在下拉菜单中选择 Debug 会导致这些项目使用它们的 Release 配置,这意味着优化。 在 VS 2019 中仍然是一个问题【参考方案3】:这可能看起来微不足道,但是在经历了很多与您提到的相同问题后,我发现当我尝试调试时我的构建设置为“发布”而不是“调试”.. 重新构建解决方案“调试”修复了它,我可以正常设置断点
【讨论】:
这让我可以设置断点,但不会永远持续下去。我仍然有调试仍然跳过随机代码行的问题 尽管所有一次性的临时成功报告都针对完全不同的解决方案,但这个问题仍然存在。但是,这个特定的“修复”需要放在“您的计算机是否已插入”旁边。这真的不是一个解决方案。是的,您确实需要电源,是的,您不能在发布版本中设置断点——天哪。 @Kenneth Møller 正如你所提到的,它可能看起来微不足道,但也解决了我的问题。【参考方案4】:我遇到了类似的问题,即无法绑定断点,以及某些局部变量未在 Locals 窗口中计算。最终修复它的是在“选项”->“调试”->“常规”选项卡中启用“在模块加载时抑制 JIT 优化(仅限托管)”选项。一旦我设置它就可以毫无问题地绑定。
【讨论】:
我试了一下,但仍然没有在我的 api 控制器中遇到断点。 用优化代码调试有很好的解释here 嗯,不,这不是解决方案。我们得到的是人们随机调整与问题无关的切换,这似乎会自行消失 最后。这也让我可以单步执行之前被跳过的代码。 这在 VS 2019 中为我解决了,非常感谢!【参考方案5】:我遇到了这个问题。我运行了一个性能分析会话,它使用性能监视器的设置修改了Web.config
文件:
<appSettings>
<add key="Microsoft.VisualStudio.Enterprise.AspNetHelper.VsInstrLocation" value="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Team Tools\Performance Tools\vsinstr.exe"/>
</appSettings>
<compilation debug="true" targetFramework="4.5"
assemblyPostProcessorType="Microsoft.VisualStudio.Enterprise.Common.AspPerformanceInstrumenter, Microsoft.VisualStudio.Enterprise.AspNetHelper, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
...
</compilation>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.VisualStudio.Enterprise.AspNetHelper" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<codeBase version="16.0.0.0" href="file:///D:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio/Shared/Common/VSPerfCollectionTools/vs2019/Microsoft.VisualStudio.Enterprise.AspNetHelper.DLL"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="VsWebSite.Interop" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<codeBase version="8.0.0.0" href="file:///D:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio/Shared/Common/VSPerfCollectionTools/vs2019/VsWebSite.Interop.DLL"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
这破坏了我在断点处停止的能力。当我恢复到原来的 Web.config(删除了 Performance Profiler 设置)时,断点又开始工作了。
【讨论】:
这是我在 VS 2017 分析后的解决方案。非常感谢。 看来断点绑定失败的原因有很多,但这是我们看到的。 这是给我的。我删除了这个 AppSetting:<add key="Microsoft.VisualStudio.Enterprise.AspNetHelper.VsInstrLocation" value="C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Team Tools\Performance Tools\vsinstr.exe"/>
【参考方案6】:
将发布模式更改为调试,就我而言,这解决了我的问题。
【讨论】:
【参考方案7】:我昨天遇到了同样的问题。我使用了“清洁解决方案”功能,它有所帮助。
【讨论】:
这几乎就像喜剧中心。我正在等待“我在机器上挥舞着一只橡胶鸡,它起作用了”。我们有六名开发人员遇到过这个问题,但这些临时神奇、无需解释的解决方案没有一个有效。【参考方案8】:解决方案是禁用设计优化。
Project Properties> Build> Advanced Compile Options> Enable Optimizations
【讨论】:
【参考方案9】:我在我的解决方案上运行性能并将其添加到我的 web.config
<compilation debug="true" targetFramework="4.5" assemblyPostProcessorType="Microsoft.VisualStudio.Enterprise.Common.AspPerformanceInstrumenter, Microsoft.VisualStudio.Enterprise.AspNetHelper, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
assemblyPostProcessorType
是问题所在,我删除了它并解决了我的问题
【讨论】:
【参考方案10】:如果您要发布您的网络应用程序,请检查 Configuration
是否设置为 Debug
(在调试配置中默认设置为未优化代码并完全创建符号表)。
【讨论】:
【参考方案11】:我没有更改“优化”设置,但根据此处的其他答案,我
-
将解决方案资源管理器设置为显示项目的所有文件
删除了隐藏的 bin 和 debug 文件夹
对项目进行了“清理”
对项目执行“重建”
到目前为止,这已经为我解决了。似乎更新到 VS2015 Update 2 在我的系统上造成了一些麻烦。
【讨论】:
【参考方案12】:我知道这是一篇旧帖子,但如果上述所有其他技巧对您不起作用,请确保您尝试调试的图像是最新的。出于某种原因,在发布 .NET Core 项目并将其传输到我的 Raspberry Pi 后,RPi 上的“解压缩”并没有复制和覆盖工作目录中的一些 DLL。当我附加调试器认为一切正常时,一些断点被击中,另一些则没有,而另一些则给我“无法绑定”错误。一旦我解决了解压缩问题,我的所有断点和符号都回来了。我希望这会有所帮助。
【讨论】:
【参考方案13】:我今天遇到绑定断点错误。我已经解决了我的问题。
如果您的所有调试配置不正确,则无法解决以下问题。
-
清理项目
如果输出路径与bin文件夹不同,则替换为bin文件夹(这是最重要的规则)
重建
也许这个解决方案可以帮助某人。
【讨论】:
【参考方案14】:VS 断点不能绑定在异步方法上。
我安装了导致此问题的 App Dynamics 代理。删除它,你就可以开始了。
【讨论】:
【参考方案15】:我有同样的问题,但没有意识到调试工具栏上的“调试”已更改为“发布”(通常直接在菜单下)。所以我将它设置为“调试”它工作。
【讨论】:
【参考方案16】:新的Update for Microsoft Visual Studio 2015 Update 3 (KB3165756) 为我解决了断点问题,我试图检查嵌入在 ASP.NET Core 应用程序的 cshtml 文件中的 C# 代码中的局部变量。
【讨论】:
【参考方案17】:第 1 步,排除明显的因素:
在调试模式下编译。 在设置断点之前尝试清理解决方案。 进入 Debug 文件夹,删除 [Your application].pdb 文件。 然后构建或重建您的应用程序。 转到 Debug 文件夹并确认您有一个全新的 [Your 应用程序].pdb 文件。 然后尝试设置断点。第 2 步对于 C++ 项目:
检查以下项目属性:
C++/通用/调试信息格式:程序数据库。 C++/优化:已禁用。 C++/代码生成/运行库:多线程调试。 链接器/调试/生成调试信息:是的。 链接器/调试/生成程序数据库: $(TargetDir)$(TargetName).pdb。 链接器/清单文件/生成清单:否。 链接器/清单文件/允许隔离:否。 链接器/嵌入式 IDL/忽略嵌入式 IDL:是。再次执行第 1 步
您可以尝试添加 __debugbreak()。这条语句需要放在你想要中断的源文件中。
第 2 步对于 C# 项目:
在项目属性 Build/General/Optimize 代码应该是 已禁用。 在IDE设置Debug/Options and Settings/Debugging/General Suppress JIT 模块加载优化(仅限托管):启用 再次执行第 1 步尝试在另一台机器上打开您的解决方案。如果您可以在不同的机器上绑定断点,这可能意味着您的 VS 或您的操作系统存在问题。
第 3 步,确保您的 VS 是最新的:
在 VS2013 RTM 以及 VS2015 Update 1 和 Update2 中都有此类问题的报告。
在 VS 中,转到 Tools/Extensions & Updates/Updates/Product Updates 并查看您正在运行的版本。如果需要更新,它将出现在那里。
第 4 步,确保您的操作系统是最新的:
最后,如果您运行的是 Win 10 操作系统,则在版本 14251 中存在一个关于此问题的报告错误。此问题已在版本 14257(及更高版本)中得到解决。
【讨论】:
【参考方案18】:我刚刚遇到了一个类似的问题,这里的答案都没有针对我所面临的问题。但是,与问题不同的是,我从未收到任何消息说绑定失败。断点永远不会命中。希望这对将来用 WCF 撞墙的人有所帮助。
TL/DR: 在 SOAP 消息中有一条错误数据记录导致断点未命中。
全文:
我有一个基于另一个团队的 WSDL 的 WCF 服务。不是我的定义,无法控制...我通过此服务接收来自其他团队的消息。在我的情况下,我收到消息,可以将消息记录到数据库中的消息日志表(这发生在我的服务方法被调用之前),服务方法似乎被调用(也许不是),服务器响应202 接受。通信正常,但在方法调用期间没有数据保存到数据库中。
由于服务返回成功响应,我排除了与 http 和传输相关的问题。
所以我启动了 VS2015 来调试服务。有问题的信息很大,但在我所期望的范围内。我在服务方法的第一行放了一个断点,并发送了大消息,但断点从未命中。我尝试了一条较小的消息,我知道它在同一个运行实例上工作,并且断点被击中得很好。所以配置中的一切似乎都很好。我想也许消息大小有问题。
我尝试了所有我能找到的东西 - 确保我处于调试配置中,清理并重建,手动将调试器附加到 w3wp 进程(VS 已经是),使用Debugger.Break()
而不是断点,设置多个启动项目,卸载我的测试项目,以便服务项目是唯一的,更新 .NET,重新启动 VS2015,重新启动,从本地 IIS 切换到 IIS Express 并返回,使用保证的最新 WSDL 重新创建服务。
什么都不重要。断点从未命中。
我最终不得不一一清除大消息中的记录,直到找到一条包含错误数据的记录。在我的情况下,它是一个对 2 个 DateTime 字段没有价值的记录。当我创建一条只有这条记录的消息并发送它时,断点没有被命中。当我为这 2 个 DateTime 字段提供值并在按预期触发的断点中发送相同(固定)消息时。
我启用了每一个 CLR 异常,除了丢失 .pbd 文件之外没有触发任何异常,这我并不关心。 WCF 愉快地发送了带有不良记录的请求。我并不是说 WCF 不应该根据合同发送它,只是因为不良记录导致断点没有被命中。
【讨论】:
【参考方案19】:我不得不修改 web.config 文件以启用调试。改变这个:
<compilation debug="true" targetFramework="4.5.2" assemblyPostProcessorType="Microsoft.VisualStudio.Enterprise.Common.AspPerformanceInstrumenter, Microsoft.VisualStudio.Enterprise.AspNetHelper, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
到:
<compilation debug="true"/>
【讨论】:
【参考方案20】:清洁整个解决方案,然后再尝试任何其他解决方案。在尝试了之前答案中所说的几乎所有其他内容并多次重新启动 Visual Studio 之后,只需清理解决方案就可以了!
【讨论】:
【参考方案21】:我尝试了这里建议的所有内容。最终,我将项目属性 -> Web 中的“特定页面”设置为我的本地起始 URL、页面和查询参数。在调试模式下进行了清理和重建,它达到了我的断点。
【讨论】:
【参考方案22】:虽然这是一个较晚的版本 (VS2017),但我在 C# 项目中遇到了这个问题。试过清理、重建、重启visual studio等。
解决方法是关闭 Visual Studio 并删除 .vs 文件夹,该文件夹是位于解决方案目录中的隐藏文件夹。删除 .vs 文件夹不会给您带来任何问题,但您需要重置启动项目。
【讨论】:
【参考方案23】:在我的例子中,在我使用Profiler
之后创建了一个新的 web.config 文件。将 web.config 恢复到以前的版本,解决了这个问题。这是一个 VS2015 C# Web 应用程序。
【讨论】:
【参考方案24】:我查看了以前的答案,@Will 的answear 修复了我遇到的主要问题,另一个能够编辑并继续,但仔细查看 AssemblyInfo.cs 文件,我发现了一些禁用的调试功能.
然后我最终删除了旧的调试属性并添加了我从另一个项目中获取的以下内容
#if DEBUG
[assembly: System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute.DebuggingModes.DisableOptimizations | System.Diagnostics.DebuggableAttribute.DebuggingModes.EnableEditAndContinue | System.Diagnostics.DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | System.Diagnostics.DebuggableAttribute.DebuggingModes.Default)]
#endif
但我觉得这不是最好的方法。
【讨论】:
以上是关于断点无法绑定 - Visual Studio 2015的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Visual Studio 2017 (Native c++) 中禁用数据断点
如何在 Visual Studio 2008 或 Visual Studio 2010 中设置 JavaScript 断点