我有以下两行代码:
lstvbWerteC.Clear ();
if (...)
lstvbWerteC是List< T>的字段。与班级范围。如果在VS 2008调试器中我在if语句上设置断点,我希望lstvbWerteC.Count为0,而不是1.我的类有一些确实填充列表的属性。为了防止调试器中的副作用,所有属性都具有属性[DebuggerBrowsable (DebuggerBrowsableState.Never)]
。然而,只要本地窗口可见,调试器就会执行填充列表的代码。隐藏本地窗口后,列表始终为空,到达if-breakpoint。有关此类问题的调试器详细信息,请参阅。
答案 0 :(得分:5)
Visual Studio菜单:工具 - 选项 - 调试 - 常规。取消选中“启用属性评估”选项。
这是来自Visual Studio 2010.Visual Studio 2008应该具有相同的选项或类似的东西。
答案 1 :(得分:1)
我认为您描述的行为在大多数文档中都是未定义的。当然没有要求比任何调试器(VS包括!)都应该尊重DebuggerBrowsable
属性。此外,调试窗口中缺少项目的 display 并不一定能保证调试器不会评估 。
调试选项中有一个名为“启用属性评估”的选项可能会或可能不会帮助您的具体案例,但一般情况下我会说您不能依赖此。
有一条经常重复的建议:“财产瘾者不应该有[可见的]副作用。”您的属性getter 做有副作用,这会导致您的调试体验出现问题,但它也可能使您的类对其他开发人员来说不那么容易理解。我的建议是考虑重新设计,以便获得属性值不会改变列表的内容。