在Visual Studio中调试时,有时我添加了一个断点,但它是空心的,VS说“断点目前不会被击中。”源代码与原始版本不同。”显然,这使我无法进行调试。

这条消息到底是什么意思?什么原始版本?如果我只是打开了解决方案,而没有对代码做任何更改,又怎么会有“原始版本”呢?


当前回答

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

转到你的bin文件夹 删除.pdb文件 重建

应该能成功!

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

其他回答

这也发生在调试一个c++项目时,该项目加载了一个用一些CLR语言(Managed c++, c#等)实现的模块。在这种情况下,错误消息确实具有误导性。

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

尽管所有的答案,我的问题实际上不同于这里提到的!

确保您的属性->构建选项卡->输出路径指向与您所选择的构建配置的解决方案中所有其他项目相同的位置!

如果你的启动项目将它的可执行文件从你试图调试的dll发送到不同的文件夹,你可能会遇到问题,尽管你的构建和visual studio工作完美。

在我的案例中,是项目/属性/构建选项卡中的错误设置

我有一个主项目引用项目xxx.dll 引用dll中的断点未被命中。

对dll的引用被设置为库文件夹中的bin\debug\xxx.dll

因此,当我调试主项目时,它会到库的bin\debug文件夹中寻找xxx.dll。

但是,在库的属性中,由于一些黑暗的原因,输出路径被设置为bin\x86\debug而不是bin\debug

因此,库的每次构建都将新的dll放在bin\x86\debug文件夹中,而不是在bin\debug中

所以VS在调试的时候总是找到一个旧的库的dll,因此错误是正确的,有一个不同的源。

所以我修正了从库到bin\debug的输出路径,所以主项目的引用现在会找到正确的版本,现在我的断点再次被击中。

我花了好几个星期才弄明白

I suffered from this recently, and in my case I traced the problem back to something I was doing when testing: changing the system time. I'm not suggesting this is the case for everyone, but thought I'd mention it since it hasn't been mentioned already. It appears if you start moving the clock around between debug builds then it can get very confused about what order various files have been created it - I can only assume it is using file modified dates to determine if the source code is valid or not, and which binaries it needs to recompile.

这也是一个重新保存网页的选项。配置以碰撞其修改时间。

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

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