Отслеживание состояния объекта в режиме отладки Visual Studio - PullRequest
2 голосов
/ 11 февраля 2011

Скажем, у меня есть WinForm, в котором у меня есть private int selectedObjectsCount.

Есть ли способ в режиме отладки, чтобы "следовать" этому состоянию объекта через сеанс отладки?В другом случае у меня есть экземпляр myFont.Я хочу видеть, в какой момент его свойство IsBold изменяется (изменяется)

Мне нужен след, потому что объект стал "плохо оцененным", и я не понимаю , где , чтослучается.

Возможно ли нечто подобное в VS 2010?

Ответы [ 7 ]

1 голос
/ 11 февраля 2011

Создайте точку останова там, где это удобно, чтобы видеть, когда объект изменяется, щелкните правой кнопкой мыши точку останова и выберите «При ударе ...», здесь вы можете напечатать содержимое объекта в окне отладки - эффективно видя, когда объект изменяется и на что.

На любой точке останова у вас будет полная трассировка в окне отладки «Call stack».

Искусство отладки - это то, что вы должны ценить и изучать (оно окупится).См. эту страницу для очень простого обзора альтернатив отладки в VS.

1 голос
/ 11 февраля 2011

В таком случае я реализую selectedObjectsCount как свойство и в установщике проверяю изменение значения:

set
{
    if (M_selectedObjectsCount != value)
    {
        selectedObjectsCount = value;//break here
    }
}
0 голосов
/ 06 августа 2015

Технически нет никаких «точек останова» в C #, поскольку объекты перемещаются в памяти на этапе компактного сбора мусора. Но часто вы можете сделать этот трюк со свойствами - свойства компилируются в методы setter и getter, и вы можете установить для них точку останова, как и любой другой метод.

Я только что ответил на очень похожий вопрос здесь:

Запрос о достижении точки останова в установщике свойств

0 голосов
/ 12 февраля 2011

Это можно сделать в Visual Studio 2010. Вам нужно использовать параметр меню «Отладка / Новая точка останова / Новая точка останова ...».

Однако эта опция доступна толькодля нативных проектов C ++.

Подробнее см. здесь - http://msdn.microsoft.com/en-us/library/350dyxd0.aspx

[edit] - Для других языков и вашей конкретной ситуации вы можете создать новый класс, унаследованный от шрифта.Класс и переопределить свойство IsBold.Поместите туда свою точку останова и используйте этот новый пользовательский класс вместо Font.Это немного затянуто, но должно работать.

0 голосов
/ 11 февраля 2011

Вы бывший пользователь Visual Interdev / VB6?

Я помню, что вы могли установить точку останова для "прерывания при изменении значения".К сожалению, это невозможно в последующих версиях.

Я думаю, что идея @ TheNIK о замене свойства, вероятно, является лучшим выбором.Или с помощью «просмотреть все ссылки», а затем печатать «При попадании», как говорит @TeddHansen.

0 голосов
/ 11 февраля 2011

Как уже говорили другие, в .NET нет «точек останова».Наилучшее, что вы можете сделать, если у вас есть переменная, которую вы хотите отслеживать, - это поставить точку прерывания внутри установщика, затем щелкнуть правой кнопкой мыши точку останова, выбрать Условную точку останова, чтобы проверить, действительно ли значение меняется.Если переменная, которую вы хотите отслеживать, является полем, вам необходимо преобразовать ее в свойство.

Если вы не владеете кодом свойства, вы можете использовать функцию Value Origin в Resharper, чтобы быстро найти все места, где свойство устанавливается вашим кодом, и поставить там точки останова: многоработа, но она выполняет свою работу.

0 голосов
/ 11 февраля 2011

Вы можете использовать окно просмотра. Если вы не видите его в нижней части VS, вы можете включить его, выбрав Debug-> Windows-> Watch-> Watch 1 (или другие окна Watch). Этот пункт меню доступен только во время отладки.

Вы можете добавлять туда объекты, их свойства и даже выражения и наблюдать их значения во время трассировки. Элементы добавляются двойным щелчком по последней строке в окне просмотра и вводом выражения в столбце «Имя».

например. введите Высота в имени, пока вы отлаживаете внутри формы, и вы увидите его значение. Вы также можете делать такие вещи, как, (высота + ширина) / 2 .

Однако вы не можете установить точку останова при изменении значения. Но во время трассировки строка, чье значение изменяется, будет выделена. К сожалению, вы должны пройти по коду, вы не можете просто запустить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...