调试自动属性
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_Height
和MainWindow.set_Height
,都没有成功。
@Hi-Angel,请注意,对于 setter,您必须包含类型,因此类似于 Form.set_Height(int)【参考方案4】:
如果我是你,我会暂时将该属性设置为由内部字段支持的标准属性...设置断点,然后您可以在之后将其更改回来。
【讨论】:
【参考方案5】:在设置属性或获取属性的地方设置断点,别无他法。
您可以通过查找所有参考文献选项来做到这一点
而且由于它只存储值并且在 setter 部分没有任何代码,所以你调试什么?
【讨论】:
是的,但是当您在例如 20 个地方使用它时会怎样?每个新断点都会减慢调试过程。或者,如果对属性的访问是由框架完成的(例如序列化)呢? 条件断点。把断点放在上面,右键单击它并为其分配一个条件...以上是关于调试自动属性的主要内容,如果未能解决你的问题,请参考以下文章