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

时间:2013-04-10 12:30:40

标签: c# debugging visual-studio-2008

我有以下两行代码:

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

lstvbWerteC是List< T>的字段。与班级范围。如果在VS 2008调试器中我在if语句上设置断点,我希望lstvbWerteC.Count为0,而不是1.我的类有一些确实填充列表的属性。为了防止调试器中的副作用,所有属性都具有属性[DebuggerBrowsable (DebuggerBrowsableState.Never)]。然而,只要本地窗口可见,调试器就会执行填充列表的代码。隐藏本地窗口后,列表始终为空,到达if-breakpoint。有关此类问题的调试器详细信息,请参阅。

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

调试选项中有一个名为“启用属性评估”的选项可能会或可能不会帮助您的具体案例,但一般情况下我会说您不能依赖此。

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