C#: VS 2008调试器执行属性代码

5
我有以下两行代码:

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

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

2个回答

5

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

这是来自 Visual Studio 2010 的设置。Visual Studio 2008 应该有相同或类似的选项。


1
我想象中,您所描述的行为在大多数文档中都是未定义的。当然,并没有任何要求(包括VS!)必须遵守DebuggerBrowsable属性。此外,在调试窗口中不显示某个项并不一定保证调试器不会评估该项。
在调试选项下有一个名为“启用属性评估”的选项,可能有助于您的特定情况,但总的来说,您不能依赖它。
有一个常见的建议:“属性getter不应具有[可见]副作用。”您的属性getter确实具有副作用,这导致了您的调试体验出现问题,但也可能使其他开发人员难以理解整个类。我的建议是考虑重新设计,使获取属性值不会改变列表内容。

+1 表示“属性的 getter 方法不应该有 [可见的] 副作用”。 - Alex F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接