【问题标题】:Conditional breakpoint on auto-implemented property setter自动实现的属性设置器上的条件断点
【发布时间】:2015-02-27 19:30:32
【问题描述】:

假设我在 ClassName 类中有这个自动实现的属性:public int Counter{ get; set; }

我未能成功地在 Visual Studio 2013 中的 C# 自动实现的属性设置器上设置条件断点。特别是在设置的新值上。 (例如,我想在它设置为负数时对其进行断点。)

我知道还有其他解决方案,例如拆分属性使其不是自动实现的属性,或者断点设置该属性的所有位置。 但我希望能够在没有繁琐的解决方法的情况下做到这一点。

我已使用https://stackoverflow.com/a/6713867/119418 的以下提示成功地在自动实现的属性设置器上设置断点

使用 Visual Studio 2008、2010、2012、2013:

  1. 转到断点窗口
  2. New->Break at Function…
  3. 要获取,请输入:ClassName.get_Counter()

    对于集合,输入:ClassName.set_Counter(int)

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

【问题讨论】:

  • 您的物业类型是int吗?
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 如果你试图打破一个属性设置器,你可能做错了什么。这没有多大意义,因为您没有做任何事情,特别是(自动属性,顺便说一句)。我的脑子很乱。
  • 例如,我想在属性值变为负数时中断。而且我不知道哪一行代码将它设置为这个负数。有很多地方可能会发生。我知道我可以有条件地对所有这些进行断点,并且如果必须的话。这是我必须在这个软件中做很多的模式(那不是我的)。
  • 我添加了auto属性(int类型)的例子

标签: c# debugging properties visual-studio-2013 breakpoints


【解决方案1】:

我不是 100% 确定你想做什么,如果我得到了正确的结果,如果有人将它设置为负值,你只是想为一个属性设置一个断点

我可能走错了方向,但您是否正在寻找这种东西

private int _age;
public int Age
{
      get{ return _age;  }
      set{ 
        if(value < 0) 
        { throw somthing;} //add a breakpoint here 
        else{ _age = value;} 
         }
}// im writing this directly in the browser so forgive space indentation etc 

这可能不是您想要的,但我确实认为这是实现您的要求的最简单方法

【讨论】:

  • 从自动属性转换为普通属性是我可能会做的一种解决方法,但需要(可能)停止当前的调试会话并重建,然后在我完成后恢复。如果我可以简单地添加一个条件断点(就像我可以添加到非自动属性一样),那就太好了。
  • oo 你能不能只用表达式 imscblogs.blob.core.windows.net/media/scottgu/Media/…假设它可以处理像 blog.dreamlabsolutions.com/image.axd?picture=WindowsLiveWriter/… 这样简单的表达式是合乎逻辑的
  • 有点傻,就像我在向合唱团讲道一样,我敢肯定有人会建议,如果这就是你要找的东西,我会在谷歌搜索后看到你的问题,它显示为 auto best i得到的是“当您使用自动属性并在访问属性时设置相同的断点时,您会注意到实际上没有发生任何事情,这是有道理的,因为只有直接的 IL 代码,由 setter 实现背后的编译器生成,没有 C# 代码,所以编译器无处可去!使用手表可能会对您有所帮助
【解决方案2】:

不完全是问题的答案(对于 Visual Studio 2013),但 getter 和 setter 上的断点预计将在 Visual Studio 2015 中工作。

https://devblogs.microsoft.com/devops/set-breakpoints-on-auto-implemented-properties-with-visual-studio-2015/

【讨论】:

  • 这不是问题所在!
  • 是的,但仍然是一个可以帮助遇到类似问题的其他人的答案(并且可能是最好的答案)。
猜你喜欢
  • 1970-01-01
  • 2011-02-10
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多