Есть ли способ поместить часы в переменную, и только Visual Studio прерывается, когда это значение изменяется?
Было бы намного проще находить сложные государственные проблемы.
Можно ли это сделать?
Условия точки останова все еще нуждаются в установке точки останова, и я бы предпочел установить часы и позволить Visual Studio устанавливать точки останова при изменении состояния.
Ответы:
В меню Visual Studio 2005:
Отладка -> Новая точка останова -> Новая точка останова данных
Войти:
источник
Вы также можете явно разорвать в коде:
Из MSDN:
Это всего лишь запасной вариант. Установка условной точки останова в Visual Studio, как описано в других комментариях, является лучшим выбором.
источник
Действительно старый пост, но в случае, если кто-то не знает ...
В Visual Studio 2015 вы можете поместить точку останова на метод
set
доступа к автоматически внедряемому свойству, и отладчик сломается при обновлении свойстваОбновить
В качестве альтернативы; @AbdulRaufMujahid указал в комментариях, что, если автоматически внедренное свойство находится на одной строке, вы можете расположить курсор на кнопке
get;
илиset;
и,F9
и точка останова будет соответственно размещена. Ницца!источник
Представьте, что у вас есть класс с именем A со следующим объявлением.
Вы хотите, чтобы программа остановилась, когда кто-то изменил значение «m_value».
Перейти к определению класса и поставить точку останова в конструкторе A.
Как только мы остановили программу:
Отладка -> Новая точка останова -> Новая точка останова данных ...
Адрес: & (this-> m_value)
байтов: 4 (потому что int имеет 4 байта)
Теперь мы можем возобновить программу. Отладчик остановится при изменении значения.
Вы можете сделать то же самое с унаследованными классами или составными классами.
Адрес: & (this-> m_a.m_value)
Если вы не знаете количество байтов переменной, которую вы хотите проверить, вы можете использовать оператор sizeof.
Например:
Если вы посмотрите на «Стек вызовов», вы увидите функцию, которая изменила значение переменной.
источник
Измените переменную на свойство и добавьте точку останова в методе set. Пример:
источник
Если вы используете WPF, есть отличный инструмент: WPF Inspector .
Он присоединяется к приложению WPF и отображает полное дерево элементов управления со всеми свойствами, что позволяет (помимо прочего) нарушать любые изменения свойств.
Но, к сожалению, я не нашел никакого инструмента, который позволил бы вам сделать то же самое с ЛЮБЫМ свойством или переменной.
источник
Я помню, как вы описали это с помощью Visual Basic 6.0 . В Visual Studio единственный способ, который я нашел до сих пор, - это указать условие точки останова .
источник
Щелчок правой кнопкой мыши по точке останова отлично работает для меня (хотя в основном я использую ее для условных точек останова на определенных значениях переменных. Даже разбиение на выражения, использующее имя потока, работает, что очень полезно, если вы пытаетесь обнаружить проблемы с потоками).
источник
Как писал Питер Мортенсен:
Дополнительная информация:
Очевидно, система должна знать, какой адрес в памяти смотреть. Итак - установите нормальную точку останова на инициализацию
myVariable
(илиmyClass.m_Variable
) - запустите систему и дождитесь ее остановки в этой точке останова. - Теперь запись меню включена, и вы можете смотреть переменную, вводя&myVariable
, или экземпляр, вводя&myClass.m_Variable
. Теперь адреса четко определены.Извините, когда я поступил неправильно, объяснив уже данное решение. Но я не мог добавить комментарий, и там было несколько комментариев по этому поводу.
источник
Вы можете использовать контрольную точку памяти в неуправляемом коде. Не уверен, что они доступны в управляемом коде.
источник
Вероятно, вы можете разумно использовать функцию DebugBreak () .
источник
myVariable
используется, и сохранить его значения после использования во вспомогательнойpreviousValue
переменной, а затем вызвать DebugBreak () когдаmyVariable!=previousValue
; тогда вы будете знать, между какими блоками кодаmyVariable
произошли изменения. Но я согласен, что решение AShelly является лучшим.При желании вы можете перегрузить оператор = для переменной и поставить точку останова внутри перегруженной функции при определенных условиях.
источник
Обновление в 2019 году:
Теперь это официально поддерживается в Visual Studio 2019 Preview 2 для .Net Core 3.0 или выше. Конечно, вам, возможно, придется подумать о потенциальных рисках использования предварительной версии IDE. Думаю, в ближайшее время это будет включено в официальную Visual Studio.
https://blogs.msdn.microsoft.com/visualstudio/2019/02/12/break-when-value-changes-data-breakpoints-for-net-core-in-visual-studio-2019/
источник