在Visual Studio 2010中如何调试属性设置?

6

假设我有这个属性

public ISetting Setting { get; set; }

如何在设定处设置断点?这样,在某些情况下程序会暂停运行,便于调试。
我尝试以下方式:
public IDatabaseConnectionSetting ConnectionSetting { 
    get; 
    set;
}

将断点放在set;行上,但仍然不起作用。红色断点高亮显示整个属性声明。

3个回答

7
这里有更好的解决方法:为什么不能在自动属性的setter上设置断点? 使用Visual Studio 2008、2010、2012:
1. 进入断点窗口 2. 新建 -> 在函数处设置断点... 3. 对于get,键入:ClassName.get_CurrentFramesize() 对于set,键入:ClassName.set_CurrentFramesize(int)
当断点被命中时,你会得到一个“无源代码”的提示,但是你会在调用堆栈中看到调用位置。
我在此找到了这个解决方案:http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/b1dd0dc3-e9c1-402a-9c79-a5abf7f7286a 另请参阅:调试自动属性

5
使用完整属性而不是自动属性。
快捷方式是 propfull
private ISetting setting;

public ISetting Setting 
{ 
    get 
    { 
        return setting; 
    }
    set 
    { 
        setting = value; 
    }
} 

要使用代码段的快捷方式,请输入propfull,然后按两次TAB

我觉得如果我必须将我的代码更改为完整属性才能调试它,这很奇怪。 - Louis Rhys
1
@Louis 是的,我同意,希望有人能回答一个我不知道存在的新技术。但是我知道很多开发人员编写代码的方式类似于 var result = blah.Evaluate; return result;,特别是他们可以在返回行上设置断点并检查返回的内容。这是相同类型的事情。 - Kirk Broadhurst
好的。只是好奇,你说的按两次Tab是什么意思?通常我会输入、按Tab、输入、按Tab、输入。 - Louis Rhys
当我输入并按下TAB(仅一次)时,没有任何反应,我只是继续输入(例如,我最终会得到propfullint) - 我必须按两次TAB,然后才能输入类型,然后是TAB,然后是字段名称等。不知道为什么,我就是这样认为的。 - Kirk Broadhurst

3
不行。自动属性与带备份存储的属性一样编译。我认为没有理由允许在它们上面设置断点,因为你必须在某个地方对它们进行赋值,在那里检查你的属性。
private bool TestProperty { get; set; }

编译过程类似于

[CompilerGenerated]
private bool <TestProperty>k__BackingField;
[CompilerGenerated]
private void set_TestProperty(bool value)
{
    this.<TestProperty>k__BackingField = value;
}
[CompilerGenerated]
private bool get_TestProperty()
{
    return this.<TestProperty>k__BackingField;
}

4
它可以设置在任何数量的地方——在Setter内部进行拆分比每个调用Setter的位置都要更有用。 - Kirk Broadhurst
我同意。这应该是VS的一个特性。我可以问一下,当你需要从许多地方调用setter时,你的使用情况是什么?只是好奇,谢谢。 - Petr Klíma

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