.net - vs2010断点无效 - 当前不会命中断点源代码与原始版本不同




“断点目前不会受到影响。 源代码与原始版本不同。“这是什么意思? (20)

如果您在Debug构建配置中未选中DLL项目,那么您的新代码将永远不会构建!

转到Build --> Configuration Manager ... (在VS2010中),并检查是否包含您正在尝试调试的代码的项目是否检查当前生成配置。

在Visual Studio中进行调试时,有时候我会添加一个断点,但它是空的,VS表示“断点不会被打中,源代码与原始版本不同。” 显然这阻止了我能够进行调试。

这个信息到底意味着什么? 什么原始版本? 如果我刚开放了解决方案,并且没有对代码进行任何修改,那么怎么会有'原始版本'?


从Visual Studio 2017 15.3.1到15.3.5,出现了一个解决此问题的新方法。 如果您使用的是EditorConfig ,则charset=utf8选项会导致这些症状。 VS队已经转载了这一消息,并表示他们正在努力

所以一个解决办法是在.editorconfig文件中注释掉你的charset=utf8行。

编辑:这应该是固定的VS 15.5。


关闭Visual Studio并重新打开解决方案可以解决这个问题,也就是说,它是IDE本身内部的一个错误(我正在运行VS2010)。

如果您有多个Visual Studio实例在运行,则只需要关闭运行问题解决方案的实例。


  • 工具
    • 选项
      • 调试
        • 一般

取消选中要求源文件以与原始版本完全匹配


在Windows 7,Visual Studio Express 2010下,如果您激活了Windows XP SP3的兼容模式选项,则可能会出现此错误。

我没有检查选项,它再次运作完美。 右键单击VS或可执行文件的快捷方式,选择属性 ,然后选择兼容性


在将现有文件添加到项目后,它恰好在Visual Studio 2017上。 这对我有效:

  1. 关闭解决方案,
  2. 请转到SolutionFolder\.vs\SolutionName\v15\sqlite3并删除storage.ide
  3. 再次打开解决方案

在调试加载已经用一些CRL语言(Managed C ++,C#等)实现的模块的C ++项目时,也会发生这种情况。 在这种情况下,错误信息确实是误导性的。

解决方案是将公共语言运行时(CLR)支持配置属性放入启动项目并重新编译。


如果您的解决方案中多个项目,请确保将正确的项目设置为StartUp Project 。 要将特定项目设置为解决方案的“启动项目”,请右键单击项目,选择“ Set As StartUp Project

在我正确设置启动项目之后,线程达到了所需的中断点。


如果您的调试过程包含多个appdomains并且程序集被加载到两个程序集中,并且其中一个加载旧副本(通常是像插件一样动态加载的东西),那么断点可能显得很稳固,但应该到达断点的线程位于与旧程序集的应用程序域,并从未命中。 您可以在模块窗口中看到装入的组件和路径。


对我来说,没有任何项目解决了这个问题。 我只是在该函数中添加了一行新的代码,如下所示:

int a=0;

通过添加,我想我触发Visual Studio将此功能添加到原始版本


对我来说,这是在一个WebSite项目上工作的时候。 清理完这些临时文件夹后,我得到了正确的编译器错误:

  • C:\Documents and Settings\%username%\AppData\Local\Temp\Temporary ASP.NET Files
  • C:\windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

我终于解决了这个问题,当我发现我有意移入子文件夹的类文件以某种方式重新出现在根文件夹中时。 当我编辑另一个时,VS正在使用那个。


对我而言,工作是将解决方案平台从x86更改为任何CPU。 在更改为Any后,我设置了一个停止地址,运行该网站,打开该页面,单击该按钮并停止。 我关闭了该站点,并将其更改回x86,并成功执行了相同的序列。


就我而言,我在VS 2012中附加了一个正在运行的进程。附加时,您可以选择以各种模式进行调试(本机,脚本,silverlight,托管2.0,托管4.0等)。 默认情况下,调试器会自动选择模式。 然而,自动并不总是做出正确的选择。 如果您的进程包含多种类型的代码,请确保调试器使用正确的代码。


当您使用激活器并且您设置断点的程序集尚未加载时,可以获得此消息。

一旦激活器加载程序集(假定程序集和调试符号是最新的),断点将被解析。 一个好的地方是调试菜单中的模块窗口。 在那里,你应该寻找你的文件所属的程序集。 首先检查装配是否已加载。 那么,它从哪里加载? 然后,加载符号文件。 再一次,符号文件从哪里加载? 最后检查两者的版本。


我也遇到过这种情况。 造成我的问题的条件是:

  • 我在本地运行完整的IIS7实例
  • 我将我的软件版本化为单独的项目

我通过打开以前的版本(VS提示询问我是否想在IIS调试中指向此实例,我回答'是'),然后打开当前版本(再次响应IIS提示符'Yes' ),然后尝试在以前的版本中进行调试。

为了解决这个问题,我只是关闭并重新打开了以前的和预期的版本,并再次声明它是调试源。


我在vs2017的32位版本中体验了这一点。

确实没有任何解决方案为我工作。 我重新启动,清理IDE文件,清理内置解决方案,从git repo中取出并重建解决方案无济于事。

我从nuget中获得了一个64位的依赖关系,只要我使用了这个程序集,源代码就不会被构建到最终的可执行文件中,而是正在构建IDE缓存的源代码。

我删除了nuget配置,删除了引用的程序集,下载了源代码,手动创建了log4net,签名,将其添加到项目中的文件夹,添加了对它的引用,并且我能够再次调试。

这是一个痛苦,我希望它在所有人都能看到的答案列表中找到答案。

编辑:尽管在IDE设置中启用了“在构建错误时发出提示”选项,但在构建期间没有错误。


检查解决方案中是否有多个具有该名称的文件。

我在一个从别人手中接过的项目上做过这件事。 在Controller.cs中,断点列表中充满了行号,有些是活动的,有些则没有。 我发现了这个问题,并尝试了几个选项,但是当我在断点上双击时,他们带我到解决方案中的不同项目。 由于这些文件被称为相同,它们似乎是相同的,但它们不是。 当然,答案是忽略该警告,因为如果您要加载其他文件,它们将变为活动状态。


正如它所说的,“源代码与原始版本不同”。

右键单击解决方案资源管理器中的项目文件夹,然后选择Clean 。 构建项目的新版本,断点将再次运行!


请转至:tools - > options - > Debugging - > General并取消选中“要求源文件与原始版本完全匹配”


问题是您的调试信息与您的程序集不同步。 解决方案很简单:

  1. 转到您的bin文件夹
  2. 删除.pdb文件
  3. 重建

应该做的伎俩!

(奇怪的是,没有丢掉.pdb文件的重建并不总是可行的,我可以看到修改的日期正在更新,但仍然在链中的某个位置(VS2013调试器,IIS,程序集缓存)未检测到此更改)





debugging