Visual Studio 2010 - использовать все, что изменяет свойство объекта - PullRequest
19 голосов
/ 30 августа 2010

Возможно ли в Visual Studio 2010 разбить что-либо (например, метод), которое изменяет свойство объекта?

Или можно узнать, изменились ли свойства объекта в приложении ASP.NET Webforms?


Обновление:

Правильный ответ можно найти по адресу: /2159882/ne-mozhete-ustanovit-tochki-ostanova-na-ustanovschike-avto-svoistv-zachem#2159886

Ответы [ 5 ]

13 голосов
/ 30 августа 2010

Если у вас есть контроль над кодом, который объявляет свойство, то, конечно, вы можете поместить точку останова в установщик.Даже если в настоящее время это автоматически реализуемое свойство, например:

public string SomeProperty { get; set; }

, вы можете легко изменить его следующим образом:

private string _someProperty;
public string SomeProperty {
    get { return _someProperty; }
    set {
        // Set breakpoint here, or type Debugger.Break();
        _someProperty = value;
    }
}

Если значение на самом деле является полем вместо свойства , вы все равно можете изменить его на свойство для достижения того же результата.

Если у вас нет доступа к коду, который объявляет свойство, то этонемного сложнее.Лично я делаю это, но это немного кропотливо:

  1. Объявите открытое статическое поле в вашем Program классе типа, который объявляет свойство.

  2. В начале программы найдите ссылку на объект, значение свойства которого изменяется, и поместите эту ссылку в это статическое поле.При необходимости используйте Reflection для извлечения приватных полей.

  3. Добавьте global::MyNamespace.Program.MyField.ImportantProperty в окно Watch во время отладки.

  4. Выполните код дозначение в окне просмотра изменится.

3 голосов
/ 30 августа 2010

Звучит так, будто вы запрашиваете функцию, которая может привести к разрыву Visual Studio при каждом изменении свойства / поля объекта.

Для свойств вы можете сделать это с обычными контрольными точками и условными.Просто установите точку останова на установщике свойств, щелкните правой кнопкой мыши и выберите условный.Затем добавьте простую проверку, чтобы увидеть, отличаются ли новое значение и существующее значение

value != backingField

Для полей действительно нет хорошего решения.В отладчике C ++ есть функция Data BreakPoints, которая имеет именно такое поведение.Но они недоступны для управляемых языков, прежде всего потому, что отладчик CLR их не поддерживает.Лучшее, что вы можете сделать, это временно изменить свое поле на свойство и использовать описанный выше метод.

2 голосов
/ 30 августа 2010

Щелкните правой кнопкой мыши красную точку, которая представляет точку останова - выберите Condition и введите выражение, если вы хотите, чтобы точка останова прервала выполнение, или установите флажок Has changed, чтобы прервать всякий раз, когда значение изменяется.

1 голос
/ 30 августа 2010

Я не думаю, что в VS IDE есть способ, позволяющий вам установить такую ​​общую точку останова. Если вам это действительно нужно и вы хотите внести некоторые изменения в код, вы можете взглянуть на частичные методы . Используя частичные методы, вы определяете частичный метод и вызываете его из ваших установщиков. Если вы хотите отладить, чтобы выяснить, кто вызывает сеттер, вы можете предоставить фиктивную реализацию частичного метода. Когда вы закончите отладку, вы можете избавиться от реализации, и компилятор не сгенерирует ничего, связанного с этим методом, как если бы он не существовал. Это загрязняет ваш код, если вы не можете думать о других возможных применениях частичного вызова метода из ваших сеттеров. Тем не менее, я просто хотел выбросить это, чтобы вы знали.

0 голосов
/ 30 августа 2010

Вы можете использовать метод System.Diagnoistic.Debugger.Break () для своей цели следующим образом

if(x!= y)
    Debugger.Break()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...