5

我有以下两行代码:

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

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

4

2 回答 2

5

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

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

于 2013-04-10T12:41:03.463 回答
1

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

在调试选项下有一个名为“启用属性评估”的选项可能会或可能不会帮助您的特定情况,但总的来说我会说您不能依赖它。

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

于 2013-04-10T12:46:14.243 回答