【问题标题】:How to debug on a property's set in Visual studio 2010? [duplicate]如何调试 Visual Studio 2010 中的属性集? [复制]
【发布时间】:2011-11-03 07:31:05
【问题描述】:

假设我有这个属性

public ISetting Setting { get; set; }

如何在集合处获得断点?这样程序会在设置值时暂停。

我试着这样做

public IDatabaseConnectionSetting ConnectionSetting { 
    get; 
    set;
}

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

【问题讨论】:

    标签: c# visual-studio debugging properties breakpoints


    【解决方案1】:

    这里有更好的解决方案:Can't set breakpoints on an auto-property setter ? Why?

    使用 Visual Studio 2008、2010、2012:

    1. 转到断点窗口

    2. New->Break at Function…

    3. 对于获取,键入:ClassName.get_CurrentFramesize()

      对于集合,键入:ClassName.set_CurrentFramesize(int)

    当断点被命中时你会得到一个“没有可用的源”,但你会得到调用堆栈中的调用位置。

    我在这里找到了这个解决方案:http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/b1dd0dc3-e9c1-402a-9c79-a5abf7f7286a

    另见:Debugging automatic properties

    【讨论】:

      【解决方案2】:

      不,你不能。自动属性的编译方式与带有后备存储的属性类似。我认为没有理由允许在它们上设置断点,因为你必须在某个地方分配它们,在那里检查你的属性。

      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;
      }
      

      【讨论】:

      • 它可以设置在任意数量的地方 - 打破 setter 内部比调用 setter 的每个地方都更有用。
      • 我同意。这应该是VS的特点。当您需要来自许多地方的呼叫设置器时,请问您的用例是什么?只是好奇,谢谢。
      【解决方案3】:

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

      快捷方式是propfull

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

      要使用 code-sn-p 快捷方式,请键入 propfull,然后按两次 TAB

      【讨论】:

      • 如果我必须将代码更改为完整属性来调试它,我觉得很奇怪
      • @Louis 是的,我同意并希望有人会用我不知道的新技术来回答。但是我知道很多开发人员专门编写了var result = blah.Evaluate; return result; 之类的代码,因此他们可以在返回行上设置断点并检查返回的内容。这是同一类事情。
      • 好的。只是好奇,按两次tab是什么意思?通常我输入它,tab,type,tab,type。
      • 当我输入它并按TAB(仅一次)时,什么也没有发生,我只会输入(例如,我最终会输入propfullint) - 我必须按两次TAB ,然后我可以输入类型,然后是TAB,然后是字段名等。不知道为什么,我以为是这样的。
      猜你喜欢
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2012-03-08
      • 2011-04-13
      相关资源
      最近更新 更多