调试自动属性

Posted

技术标签:

【中文标题】调试自动属性【英文标题】: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。更重要的是我主要是在开玩笑:) 【参考方案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:

    转到断点窗口 新 -> 函数中断…

    对于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 个地方使用它时会怎样?每个新断点都会减慢调试过程。或者,如果对属性的访问是由框架完成的(例如序列化)呢? 条件断点。把断点放在上面,右键单击它并为其分配一个条件...

以上是关于调试自动属性的主要内容,如果未能解决你的问题,请参考以下文章

具有 gradle 额外属性的自动增量版本代码

Python帮助函数调试函数 用于获取对象的属性及属性值

如何导出 VS 2019 属性页的调试配置属性?

在 NSManagedObjects 上的错误调试属性的对象上找不到属性

2019-11-29-WPF-依赖属性绑定不上调试方法

一个ABAP调试器里查看类的静态属性的小技巧