Подтвердить что ты не робот

Visual Studio 2010 - перерыв во всем, что изменяет свойство объекта

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

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


Обновление:

Правильный ответ можно найти по адресу: qaru.site/info/213637/...

4b9b3361

Ответ 1

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

public string SomeProperty { get; set; }

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

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

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

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

  • Объявить публичное статическое поле в вашем классе Program типа, объявляющего свойство.

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

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

  • Пройдите код, пока не изменится значение в окне просмотра.

Ответ 2

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

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

value != backingField

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

if(x!= y)
    Debugger.Break()