【问题标题】:Can't set breakpoints on an auto-property setter ? Why?不能在自动属性设置器上设置断点?为什么?
【发布时间】:2011-02-10 13:48:54
【问题描述】:

显然 VS 2008 不允许仅在自动属性的设置器上设置断点。

即如果我这样定义一个自动属性:

    public int CurrentFramesize
    {
        get; 
        protected set;
    }

然后尝试在 setter 行设置断点,整个自动属性变为断点红色。

这适用于普通属性,所以知道为什么自动属性会得到这种特殊(限制性)处理吗?它们不仅仅是带有隐藏支持字段的普通属性的语法糖吗?

【问题讨论】:

标签: visual-studio-2008 .net-3.5 debugging breakpoints automatic-properties


【解决方案1】:

使用 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

【讨论】:

  • 不知怎的,我错过了两年半的答案。 +1 并接受! :)
  • 在 Visual Studio 2019 中工作,(第 2 点是新的-> 函数断点...
【解决方案2】:

简短的回答是:这个 bug 功能最终出现在 VS2008 的剪辑室地板上。

(更长的answer - 帽子提示@jdk)

我们得到的只是一个模糊的承诺,它正在考虑用于 vNext。

【讨论】:

    【解决方案3】:
    【解决方案4】:

    不,您不能在它们上设置断点,但是您会检查什么?用于存储自动属性的变量仅在运行时分配,因此没有可供调试器显示/访问的变量。

    【讨论】:

    • 您可能需要检查 何时 分配它,如果它似乎从“某处”获得了错误的值。
    • @Hans Kesting:准确。 CLR 调试器没有 data 断点,因此如果支持这一点,那将是下一个最好的选择。
    猜你喜欢
    • 1970-01-01
    • 2015-02-27
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多