【问题标题】:C#: VS 2008 debugger executing property codeC#:VS 2008 调试器执行属性代码
【发布时间】:2013-04-10 12:30:40
【问题描述】:

我有以下两行代码:

lstvbWerteC.Clear ();
if (...)

lstvbWerteC 是具有类作用域的 List 的一个字段。如果在 VS 2008 调试器中我在 if 语句上设置了一个断点,我希望 lstvbWerteC.Count 为 0,但实际上它为 1。我的类有一些属性确实填满了列表。为了防止调试器中的副作用,所有属性都具有属性[DebuggerBrowsable (DebuggerBrowsableState.Never)]。然而,只要本地窗口可见,调试器似乎就会执行填充列表的代码。在本地窗口隐藏的情况下,列表在到达 if 断点时始终为空。任何有关此类问题的调试器详细信息的信息将不胜感激。

【问题讨论】:

    标签: c# debugging visual-studio-2008


    【解决方案1】:

    Visual Studio 菜单:工具 - 选项 - 调试 - 常规。取消选中“启用属性评估”选项。

    这是来自 Visual Studio 2010。V​​isual Studio 2008 应该有相同的选项或类似的东西。

    【讨论】:

      【解决方案2】:

      我想您描述的行为在大多数文档中都是未定义的。当然,没有任何要求比任何调试器(包括VS!)都应该尊重DebuggerBrowsable 属性。此外,调试窗口中缺少显示项并不一定保证调试器不会评估该项。

      在名为“启用属性评估”的调试选项下有一个选项可能对您的具体情况有所帮助,也可能无济于事,但总的来说,我认为您不能依赖它。

      有一条经常被重复的建议:“property getter 不应该有 [可见的] 副作用。”您的属性获取器确实有副作用,这会导致您的调试体验出现问题,但它也可能使您的类作为一个整体对其他开发人员来说不太容易理解。我的建议是考虑重新设计,以便获取属性值不会改变列表的内容。

      【讨论】:

      • +1 表示“property getter 不应该有 [可见] 副作用”。
      猜你喜欢
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2021-08-10
      • 2016-03-18
      • 1970-01-01
      • 2018-07-22
      相关资源
      最近更新 更多