Visual Studio断点警告

在调试我的代码时,我经常抛出断点来检查局部变量的值,以确保一切都在正确的轨道上。

最近,当我对代码进行更改并重新编译时,我的所有断点都变成了圆圈的轮廓(而不是一个完整的红色圆圈),它给出了一个错误,它会读取;

断点当前不会被击中。 此行没有可执行代码。 可能的原因包括:条件编译或编译器优化。

这个问题的一个奇怪之处在于我可以简单地删除并添加断点,一切都可以正常工作。

我没有使用任何类型的条件编译或编译器优化。 有谁知道这意味着什么或如何解决这个问题? 每次编译时替换10-12个断点都会非常烦人。

出现这种情况有几个原因

  • 调试器使用的代码与运行应用程序的代码不同
  • 调试器正在使用的pdb文件与运行应用程序的代码不同
  • 应用程序运行的代码已经过优化,调试信息已被删除。
  • 您有断点的代码尚未加载到进程中(假设上面的内容不是罪魁祸首)
  • 如果您要附加调试器,请注意它附加的.net框架(当代码全部是.net 2.0时,我使用.net 4时遇到了问题)
  • 您拥有的程序集也在GAC中。 如果您安装了程序以便调试它,但安装程序将dll放入GAC,则可能会发生这种情况。
  • 删除引用并重新添加它(感谢forsvarir )。 通常,当引用的项目不在解决方案中时,会发生这种情况,VS将从另一个项目的bin目录中复制dll。 当您尝试重新添加引用时,您将知道这是问题,并且无法找到项目:)

很难弄清楚这里发生了什么,但我建议使用融合日志查看器来查看正在加载的内容以及从哪里加载,然后你可以查看dll并查看它是否是旧代码等。

检查项目设置

确保不检查代码优化选项,并确保选中调试符号。

调试

请注意,当您更改配置时,其他设置也可能会更改,您可能看不到。 确保您尝试编译的配置的值正确。


删除输出文件

物理删除所有生成的DLL,PDB和EXE。 然后再次编译以生成文件。 在构建解决方案时,Visual Studio可能会“迷路”并“忘记”覆盖输出文件。


重启你的电脑

它通常可以解决99%的问题。 我已经遇到了Visual Studio的一些问题并重新启动它或计算机解决了问题。

我知道这是一个老post,但仍然足够及时,因为我正在寻找任何其他原因,我可能会遇到这个问题。

也就是说,如果要创建Web应用程序,也可能需要检查c:\ Windows \ Microsoft.NET \ [Frameworks]目录中的“Temporary ASP.NET Files”,因为这些文件通常是我的经验所致。

正如我刚刚发现的那样,使用预编译器指令#line似乎也会影响断点行为。

将此响应添加到旧线程,以防有人像我一样在旧的ASP.Net应用程序中追踪这个谜。 我有一个Webform代码隐藏,没有响应断点与“…没有可执行代码……”调试器警告。 它正在努力,因为所有其他页面都正常工作。 我已经完成了清理,重建,清除了临时的ASP.Net文件,没有任何乐趣。

这个文件的罪魁祸首是包含一些围绕一些成员变量声明的#ExternalSource指令。 删除这些项目并重建项目后,将恢复断点行为。 那些ExternalSource行出现在代码隐藏的生成部分中。 不知道为什么他们在那里。