【问题标题】:Debugging automatic properties调试自动属性
【发布时间】:2011-05-23 10:16:09
【问题描述】:

有没有办法在自动实现的属性中设置 setter/getter 的断点?

int Counter { get; set; }

除了将其更改为标准属性(我正在这样做,但要这样做我必须更改并重新编译整个项目)

【问题讨论】:

  • 您使用的是什么 IDE?视觉工作室? (我建议您在问题中添加相应的标签,因为这实际上与特定的 IDE 相关,而不是与 C# 语言本身相关。)
  • @stakx 在 .NET 世界中我们有一个默认的 IDE :)
  • @Stilgar,我知道,毕竟我自己在使用 VS。但“默认”并不意味着它是唯一的,也不意味着每个人都使用它。由于这是一个 IDE 问题,因此了解我们在这里查看的是哪个 IDE 很重要。因此我之前的评论。
  • @stakx 很好,当没有提及 .NET 相关问题的 IDE 时,假设它是 VS。更重要的是我主要是在开玩笑:)

标签: c# visual-studio properties breakpoints


【解决方案1】:

这个问题很老了,但值得注意的是它只适用于 VS 2015。

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

class X {
  public string name {
    set;
    get; // setting a breakpoint here will break in VS 2015!
  }
}

【讨论】:

    【解决方案2】:

    在 Visual Studio 2017 上:

    将鼠标悬停在“设置”字上 -> 右键单击​​ -> 断点 -> 插入断点

    之前:

    之后:

    【讨论】:

    • 使用 VS2019
    【解决方案3】:

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

    1. 转到断点窗口
    2. 新 -> 函数中断…
    3. 对于get,输入:ClassName.get_Counter()

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

    当断点被命中时,你会得到一个“No Source Available”,但你会在调用堆栈中得到调用位置。

    我找到了这个解决方案here on MSDN

    【讨论】:

    • 辉煌。谢谢。我不再需要将自动属性更改为标准属性(带字段)。并且不再需要重新编译:)
    • 这也适用于默认构造函数。使用ClassName.ctor
    • VS2015 已通过 setting the breakpoints on the auto getter & setter :) 解决了这个问题
    • 在这里不起作用。我尝试了Form.set_HeightMainWindow.set_Height,都没有成功。
    • @Hi-Angel,请注意,对于 setter,您必须包含类型,因此类似于 Form.set_Height(int)
    【解决方案4】:

    如果我是你,我会暂时将该属性设置为由内部字段支持的标准属性...设置断点,然后您可以在之后将其更改回来。

    【讨论】:

      【解决方案5】:

      在设置属性或获取属性的地方设置断点,别无他法。

      您可以通过查找所有参考文献选项来做到这一点

      而且由于它只存储值并且在 setter 部分没有任何代码,所以你调试什么?

      【讨论】:

      • 是的,但是当您在例如 20 个地方使用它时会怎样?每个新断点都会减慢调试过程。或者,如果对属性的访问是由框架完成的(例如序列化)呢?
      • 条件断点。把断点放在上面,右键单击它并为其分配一个条件...
      猜你喜欢
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2013-05-12
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多