Watches¶
Watch — это выражение, которое пересчитывается на каждой остановке и остаётся на экране. Панель открывается по Ctrl+W.
Watches нужны для того, за чем вы на самом деле следите: счётчик, флаг, поле в глубине структуры. Иначе после каждого шага пришлось бы заново разворачивать тот же путь в Переменных.
Добавить и удалить¶
| Клавиша | Действие |
|---|---|
| Enter | войти в поле ввода и написать выражение |
| Esc | выйти из поля ввода |
| J / K | переходить между выражениями |
| D / Del | удалить выбранное выражение |
Выражения пишутся на языке отлаживаемой программы — ровно так, как вы написали бы их в коде в этом месте.
Вычисляются в выбранном фрейме¶
Watch вычисляется в том фрейме, который выбран в Стеке вызовов, а не обязательно в верхнем. Выбор другого фрейма пересчитывает все watches относительно него.
Значит, выражение может быть осмысленным в одном фрейме и бессмысленным в
другом, и это нормально: self существует в методе и не существует в main.
Результат тоже дерево¶
Результат watch не обязан быть скаляром. Если выражение возвращает структуру или коллекцию, строка разворачивается как любой узел в Variables — L / Right — с той же ленивой загрузкой и той же постраничной подгрузкой больших коллекций.
Watches и побочные эффекты¶
Выражение watch выполняется в отлаживаемой программе. Если оно вызывает функцию, эта функция выполнится — и так на каждой остановке. Выражение, которое меняет состояние, шлёт запрос или пишет файл, будет делать это раз за разом и изменит поведение той самой программы, которую вы отлаживаете.
Держите в watches только чтение. Для всего, что имеет побочный эффект, есть Evaluate, где момент выполнения выбираете вы.
Если watch показывает ошибку¶
Обычные причины по убыванию вероятности:
- Выражение недопустимо в выбранном фрейме — переменная там вне области видимости.
- Имя написано не так, как в исходнике, либо это макрос или конструкция времени компиляции, которую адаптер не разрешает.
- У фрейма нет отладочной информации, и разрешать в нём попросту нечего.
Ошибка в одном watch не влияет на остальные.