问题 在VS10中调试时断点没有被击中


我正在开发一个C#和Silverlight项目,每隔一段时间我遇到一个问题,我的断点在调试时不再受到攻击。在编辑器中,它们没有变得透明,因此我知道正确的代码已加载并正在运行。

一个例子是:

我有 Value 使用getter和setter,它被绑定到一个控件。当我在setter中放置一个断点时,我改变了它的值 Value 从控制中断点没有被击中。

我知道IIS重置修复了这个问题,但我想知道原因。有没有人发现类似的行为?如果有人能够指出我可能的原因,将非常感激。


11726
2017-08-19 14:39


起源



答案:


Visual Studio 2010中有一个选项:

  • 工具 - >选项......
  • 调试 - >常规
  • “跨越属性和运营商(仅管理)”

确保未选中此项。这假设断点是一个实心的红色圆圈,表示VS已找到它的调试符号。

或者,这些代码元素可以用各种调试属性之一进行修饰,即 DebuggerStepThroughAttributeDebuggerNonUserCodeAttribute 和 DebuggerHiddenAttribute。这些可能会阻止调试器进入方法,即使存在断点。

当然,如果您正在调试的代码已经过优化,那么它可能看起来像是缺少行。我不确定如果你试图断开已经优化的线路会发生什么。

如果断点已经空洞(不是纯红色),则Visual Studio可能无法找到代码的调试符号。

如果重置可以解决问题,也许在调试的代码和原始的源文件/符号之间存在差异,有一个选项可以使它不那么严格:

  • 与上面相同的选项区域。
  • “要求源文件与原始版本完全匹配”

9
2017-08-19 14:44



这有点像我在想的那样。感谢您提供有关设置的信息。很确定这应该照顾它。 - J Lundberg


答案:


Visual Studio 2010中有一个选项:

  • 工具 - >选项......
  • 调试 - >常规
  • “跨越属性和运营商(仅管理)”

确保未选中此项。这假设断点是一个实心的红色圆圈,表示VS已找到它的调试符号。

或者,这些代码元素可以用各种调试属性之一进行修饰,即 DebuggerStepThroughAttributeDebuggerNonUserCodeAttribute 和 DebuggerHiddenAttribute。这些可能会阻止调试器进入方法,即使存在断点。

当然,如果您正在调试的代码已经过优化,那么它可能看起来像是缺少行。我不确定如果你试图断开已经优化的线路会发生什么。

如果断点已经空洞(不是纯红色),则Visual Studio可能无法找到代码的调试符号。

如果重置可以解决问题,也许在调试的代码和原始的源文件/符号之间存在差异,有一个选项可以使它不那么严格:

  • 与上面相同的选项区域。
  • “要求源文件与原始版本完全匹配”

9
2017-08-19 14:44



这有点像我在想的那样。感谢您提供有关设置的信息。很确定这应该照顾它。 - J Lundberg


很多时候我在winforms应用程序上遇到这个问题。我做的很简单,就是在清理和重建解决方案之前重新启动VS.然后,如果没有任何效果,只需删除bin目录并再次重建。我做的最后一个选择是重启机器。


1
2017-08-19 14:47





我最近遇到过这个问题。虽然我没有找到确切的原因,但一个简单的解决方法是检查应用程序是否在调试模式下运行(而不是发布)并清理/重建解决方案。


0
2017-08-19 14:44



我知道这不是问题。我每次检查的第一件事。谢谢。 - J Lundberg


在试图理解为什么我自己的项目的断点没有被尝试在vs2010中运行代码时发现这个问题

通过查看下面的项目属性来解决它 高级编译选项 并将“生成调试信息”设置为“完全”。

可能值得一提的是,我通过右键单击我想要调试的函数,使用非常方便的TestDriven.net的“Test With - > Debugger”跳转到我希望调试的代码。


0
2017-10-25 03:16





(至少)两个可能的原因:Visual Studio选项, 或ReSharper选项

:如果我打破一些电话就像 Console.WriteLine(myVar.myProp),我也打破了 myProp 吸气, 将完全跳过getter中的断点 如果仍然打开以下设置。


0
2017-07-17 21:08