Перерыв при изменении значения с помощью отладчика Visual Studio
есть ли способ поместить часы на переменную и иметь только разрыв Visual Studio, когда это значение изменяется?
Это сделает его гораздо легче найти сложные государственные вопросы.
можно ли это сделать?
условия точки останова по-прежнему нуждаются в наборе точек останова, и я бы предпочел установить часы и позволить Visual Studio установить точки останова при изменении состояния.
11 ответов:
в меню Visual Studio 2005:
Debug ->Новая Точка Останова ->Новая Точка Останова По Данным
введите:
&myVariable
вы также можете выбрать явное нарушение в коде:
// Assuming C# if (condition) { System.Diagnostics.Debugger.Break(); }от MSDN:
отладчик.Ломать: Если отладчик не подключен, пользователи спросил, хотят ли они прикрепить отладчик. Если да, то отладчик начатый. Если отладчик подключен, отладчик сигнализируется с пользователем событие точки останова и отладчик приостанавливает выполнение процесса просто как будто точка останова отладчика была удар.
Это только a но это запасной вариант. Установка условной точки останова в Visual Studio, как описано в других комментариях, является лучшим выбором.
очень старый пост, но в случае если кто-то не знает...
на Visual Studio 2015, вы можете поместить точку останова на
setметод доступа к автоматически реализованному свойству и отладчик сломается при обновлении свойстваpublic bool IsUpdated { get; set; //set breakpoint on this line }обновление
альтернативно; @AbdulRaufMujahid указал в комментариях, что если свойство auto implemented находится в одной строке, вы можете поместить курсор на
get;илиset;и нажмитеF9и точка останова будет размещена соответственно. Мило!public bool IsUpdated { get; set; }
представьте, что у вас есть класс с именем A со следующим объявлением.
class A { public: A(); private: int m_value; };вы хотите, чтобы программа остановится, когда кто-то изменяет значение "m_value".
перейти к определению класса и поставить точку останова в конструкторе А.
A::A() { ... // set breakpoint here }как только мы остановили программу:
Отладка - > Новая Точка Останова - > Новая Точка Останова Данных ...
адрес: &(this - >m_value)
Количество байтов: 4 (потому что int имеет 4 байт)теперь мы можем возобновить программу. Отладчик остановится при изменении значения.
вы можете сделать то же самое с унаследованными классами или составными классами.
class B { private: A m_a; };адрес: &(this - >m_a. m_value)
если вы не знаете количество байтов переменной, которую вы хотите проверить, вы можете использовать оператор sizeof.
например:
// to know the size of the word processor, // if you want to inspect a pointer. int wordTam = sizeof (void* );если вы посмотрите на "стек вызовов" вы можете увидеть функцию, которая изменилась значение переменной.
изменить переменную в свойство и добавьте точку останова в метод set. Пример:
private bool m_Var = false; protected bool var { get { return m_var; } set { m_var = value; } }
Если вы используете WPF, есть удивительный инструмент: инспектор WPF.
Он присоединяется к приложению WPF и отображает полное дерево элементов управления со всеми свойствами, что позволяет вам (среди прочего) нарушать любое изменение свойств.но, к сожалению, я не нашел никакого инструмента, который позволил бы вам сделать то же самое с любым свойством или переменной.
Я помню, как вы описывали его с помощью Visual Basic 6.0. В Visual Studio единственный способ, который я нашел до сих пор, - это указать условие останова.
щелкните правой кнопкой мыши на точке останова отлично работает для меня (хотя в основном я использую его для условных точек останова на конкретных значениях переменных. Даже нарушение выражений, связанных с именем потока, работает, что очень полезно, если вы пытаетесь определить проблемы с потоками).
вы можете использовать точку наблюдения памяти в неуправляемом коде. Не уверен, что они доступны в управляемом коде, хотя.
вы, вероятно, можете сделать умное использование DebugBreak()
вы можете дополнительно перегрузить оператор = для переменной и можете поместить точку останова внутри перегруженной функции на определенное условие.
Comments