调试自动属性


126

有什么方法可以在自动实现的属性中的setter / getter上设置断点?

int Counter { get; set; }

除了将其更改为标准属性(我是通过这种方式进行的,但要这样做,我必须更改并重新编译整个项目)


2
您正在使用哪种IDE?视觉工作室?(我建议您在问题中添加一个相应的标签,因为它实际上与特定的IDE有关,而不是与C#语言本身有关。)
stakx-不再对2010年

5
.net世界中的@stakx,我们有一个默认的IDE :)
Stilgar 2010年

1
@Stilgar,我知道,毕竟我是在使用VS。但是,“默认”并不意味着它是唯一的,也不是每个人都使用它。由于这是一个IDE问题,因此了解我们在这里查看哪个IDE至关重要。因此,我之前的评论。
stakx-不再贡献

4
@stakx很好,当没有提及针对.NET相关问题的IDE时,假定它是VS。更重要的是,我主要是在开玩笑:)
Stilgar 2010年

Answers:


220

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

  1. 转到断点窗口
  2. 新功能->功能突破…
  3. 对于get,输入:ClassName.get_Counter()

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

你会得到一个 命中断点时, “无可用源”,但您将在调用堆栈中获得调用位置。

在MSDN上找到了此解决方案


太好了 谢谢。我不再需要将自动属性更改为标准属性(带有字段)。再也无需重新编译:)
Marek Kwiendacz 2011年

9
这也适用于默认构造函数。使用ClassName.ctor
克林Darie

11
VS2015已经刚刚修复了这个设置中的自动吸气和二传手的断点 :)
cateyes

1
在这里不工作。我同时尝试了Form.set_HeightMainWindow.set_Height,但均无济于事。
Hi-Angel

@嗨天使,请注意,对于制定者,你必须包括的类型,所以像Form.set_Height(INT)
马特·史密斯

7

如果我是你,我会暂时将该属性设置为标准属性,并以内部字段作为后盾...设置断点,然后可以将其更改回去。



2

在Visual Studio 2017上:

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

之前:

之前

后:

后


0

在要设置属性或获取属性的地方设置断点,没有其他方法。

您可以通过“ 查找所有参考”选项来执行此操作

而且,由于它仅存储值,而在setter部分中没有任何代码,因此您要调试什么?


3
是的,但是当您在20个地方使用它时会怎样?每个新的断点都会减慢调试过程。或者,如果通过框架完成对属性的访问(例如序列化)怎么办?
Marek Kwiendacz 2010年

1
有条件的断点。放置断点,右键单击它并为其指定一个条件...
Phill 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.