Перейти к содержанию

Watches

Watch — это выражение, которое пересчитывается на каждой остановке и остаётся на экране. Панель открывается по Ctrl+W.

Watches нужны для того, за чем вы на самом деле следите: счётчик, флаг, поле в глубине структуры. Иначе после каждого шага пришлось бы заново разворачивать тот же путь в Переменных.

Добавить и удалить

Клавиша Действие
Enter войти в поле ввода и написать выражение
Esc выйти из поля ввода
J / K переходить между выражениями
D / Del удалить выбранное выражение

Выражения пишутся на языке отлаживаемой программы — ровно так, как вы написали бы их в коде в этом месте.

Вычисляются в выбранном фрейме

Watch вычисляется в том фрейме, который выбран в Стеке вызовов, а не обязательно в верхнем. Выбор другого фрейма пересчитывает все watches относительно него.

Значит, выражение может быть осмысленным в одном фрейме и бессмысленным в другом, и это нормально: self существует в методе и не существует в main.

Результат тоже дерево

Результат watch не обязан быть скаляром. Если выражение возвращает структуру или коллекцию, строка разворачивается как любой узел в Variables — L / Right — с той же ленивой загрузкой и той же постраничной подгрузкой больших коллекций.

Watches и побочные эффекты

Выражение watch выполняется в отлаживаемой программе. Если оно вызывает функцию, эта функция выполнится — и так на каждой остановке. Выражение, которое меняет состояние, шлёт запрос или пишет файл, будет делать это раз за разом и изменит поведение той самой программы, которую вы отлаживаете.

Держите в watches только чтение. Для всего, что имеет побочный эффект, есть Evaluate, где момент выполнения выбираете вы.

Если watch показывает ошибку

Обычные причины по убыванию вероятности:

  1. Выражение недопустимо в выбранном фрейме — переменная там вне области видимости.
  2. Имя написано не так, как в исходнике, либо это макрос или конструкция времени компиляции, которую адаптер не разрешает.
  3. У фрейма нет отладочной информации, и разрешать в нём попросту нечего.

Ошибка в одном watch не влияет на остальные.