Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何调试属性';是以VisualStudio2010为背景的吗?_C#_Visual Studio_Debugging_Properties_Breakpoints - Fatal编程技术网

C# 如何调试属性';是以VisualStudio2010为背景的吗?

C# 如何调试属性';是以VisualStudio2010为背景的吗?,c#,visual-studio,debugging,properties,breakpoints,C#,Visual Studio,Debugging,Properties,Breakpoints,假设我有这个财产 public ISetting Setting { get; set; } 如何在集合中获取断点?这样当有东西在设定值时,程序就会暂停 我试着这样做 public IDatabaseConnectionSetting ConnectionSetting { get; set; } 并将断点放在集合上行,但仍然不起作用。红色断点高亮显示整个属性声明使用完整属性而不是自动属性 快捷方式是propfull private ISetting setting;

假设我有这个财产

public ISetting Setting { get; set; }
如何在集合中获取断点?这样当有东西在设定值时,程序就会暂停

我试着这样做

public IDatabaseConnectionSetting ConnectionSetting { 
    get; 
    set;
}

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

使用完整属性而不是自动属性

快捷方式是
propfull

private ISetting setting;

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

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

不行。自动属性的编译方式与支持存储区的编译方式类似。我认为没有理由在它们上允许断点,因为您必须在某个地方分配断点,并在那里检查您的属性

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;
}
[编译生成]
私人布尔·库尤·贝林菲尔德;
[编译生成]
私有void set_TestProperty(bool值)
{
this.k_uubackingfield=值;
}
[编译生成]
私有bool get_TestProperty()
{
返回此.k__BackingField;
}

这里有一个更好的解决方案:

使用Visual Studio 2008、2010、2012:

  • 转到断点窗口

  • 新建->在功能处中断

  • 对于get,键入:ClassName.get\u CurrentFramesize()

    对于集合,键入:ClassName.set\u CurrentFramesize(int)

  • 当遇到断点时,您将得到一个“无可用源”,但您将在调用堆栈中得到调用>位置

    我在这里找到了这个解决方案:

    另见:


    如果为了调试而不得不将代码更改为full属性,我会觉得很奇怪it@Louis是的,我同意,希望有人会用一种我不知道存在的新技术来回答。但是我知道很多开发人员编写的代码像
    var result=blah.Evaluate;返回结果特别是,这样他们可以在返回行上放置断点并检查返回的内容。那是同样的事情。只是好奇,按tab键两次是什么意思?通常我会键入它,tab,type,tab,type。当我键入它并按
    tab
    (仅一次)时,什么都不会发生,我只会键入(例如,我将以
    propfullint
    )结束-我必须按两次
    tab
    ,然后我可以输入类型,然后是
    tab
    ,然后是字段名等。不知道为什么,这就是我的想法。它可以在任意数量的地方设置-在setter内部进行设置比在每个调用setter的地方进行设置更有用。我同意。这应该是VS的特性。我可以问一下,当您需要来自多个地方的调用setter时,您的用例是什么吗?只是好奇,谢谢。