首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Visual Studio 2010 -中断任何更改对象属性的操作

Visual Studio 2010 -中断任何更改对象属性的操作
EN

Stack Overflow用户
提问于 2010-08-30 20:14:01
回答 5查看 10.7K关注 0票数 20

在Visual Studio2010中,是否有可能中断任何更改对象属性的操作(例如,一个方法)?

或者,是否可以找出ASP.NET Webforms应用程序中的对象属性是否发生了更改?

更新:

正确答案请访问:http://stackoverflow.com/questions/2682613/cant-set-breakpoints-on-an-auto-property-setter-why/6713920#6713920

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-08-30 20:25:22

如果您可以控制声明属性的代码,那么当然可以在setter中设置断点。即使它当前是一个自动实现的属性,例如:

代码语言:javascript
复制
public string SomeProperty { get; set; }

您可以像这样轻松地更改它:

代码语言:javascript
复制
private string _someProperty;
public string SomeProperty {
    get { return _someProperty; }
    set {
        // Set breakpoint here, or type Debugger.Break();
        _someProperty = value;
    }
}

如果值实际上是字段而不是属性,您仍然可以将其更改为属性以实现相同的功能。

如果你不能访问声明属性的代码,那么它就会变得相当困难。就我个人而言,我所做的是这样的,但这有点费力:

  1. 在程序中声明property.
  2. Early类型的Program类中声明一个公共静态字段,找到一个对属性值发生更改的对象的引用,并将该引用放入此静态字段中。如有必要,请使用反射来检索私有字段。
  3. 在对代码执行debugging.
  4. Step操作时将global::MyNamespace.Program.MyField.ImportantProperty添加到监视窗口,直到监视窗口中的值发生更改。
票数 14
EN

Stack Overflow用户

发布于 2010-08-30 23:34:23

这听起来像是你在请求一个特性,这个特性会导致Visual Studio在对象上的属性/字段发生变化时中断。

对于属性,可以使用普通断点和条件断点执行此操作。只需在属性设置器上设置断点,右键单击并选择conditional。然后添加一个简单的检查,以查看新值和现有值是否不同

代码语言:javascript
复制
value != backingField

对于字段,确实没有好的解决方案。C++调试器有一个称为Data BreakPoints的特性,它就具有这种行为。但它们不适用于托管语言,主要是因为CLR调试器不支持它们。您能做的最好的事情就是暂时将您的字段更改为一个属性,然后使用上述方法。

票数 4
EN

Stack Overflow用户

发布于 2010-08-30 20:22:41

右键单击代表断点的红点-如果希望断点中断执行,请选择Condition并输入expression,或者选中Has changed以在值发生更改时中断。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3600186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档