3.8 – Использование встроенного отладчика: отслеживание переменных

Добавлено 24 апреля 2021 в 15:48

В предыдущих уроках («3.6 – Использование встроенного отладчика: пошаговое выполнение» и «3.7 – Использование встроенного отладчика: запуск и точки останова») вы узнали, как использовать отладчик для отслеживания пути выполнения вашей программы. Однако пошаговое выполнение программы – это только половина того, что делает отладчик полезным. Отладчик также позволяет вам отслеживать значения переменных при пошаговом выполнении кода, и всё это без изменения кода.

Как и в предыдущих уроках, в наших примерах будет использоваться Visual Studio – если вы используете другую IDE/отладчик, команды могут называться немного по-другому или располагаться в других местах.

Предупреждение


В случае сбоя в работе убедитесь, что ваш проект скомпилирован в конфигурации отладочной сборки (для получения дополнительной информации смотрите раздел «0.9 – Настройка компилятора: конфигурации сборки»). Если вы компилируете свой проект в конфигурации релиза, функции отладчика могут работать некорректно.

Отслеживание переменных

Отслеживание переменной – это процесс проверки значения переменной во время выполнения программы в режиме отладки. Большинство отладчиков предоставляют несколько способов сделать это.

Давайте посмотрим на пример программы:

#include <iostream>
 
int main()
{
	int x{ 1 };
	std::cout << x << " ";
 
	x = x + 2;
	std::cout << x << " ";
 
	x = x + 3;
	std::cout << x << " ";
 
	return 0;
}

Это пример довольно простой программы – она печатает числа 1, 3 и 6.

Сначала запустите выполнение до курсора в строке 6.

Рисунок 1 Точка выполения программы после запуска выполнения до курсора в строке 6
Рисунок 1 – Точка выполнения программы после запуска выполнения до курсора в строке 6

На данный момент переменная x уже создана и инициализирована значением 1, поэтому, когда мы проверяем значение x, мы должны ожидать увидеть значение 1.

Самый простой способ проверить значение простой переменной, такой как x, – навести указатель мыши на переменную x. Некоторые современные отладчики поддерживают этот метод проверки простых переменных, и это наиболее простой способ сделать это.

Для пользователей Code::Blocks


Если вы используете Code::Blocks, эта опция (необъяснимо) по умолчанию отключена. Давай включим. Сначала перейдите в меню Settings (Настройки) → Debugger (Отладчик). Затем в узле GDB/CDB debugger (отладчик GDB/CDB) выберите профиль Default (по умолчанию). И установите флажок «Evaluate expression under cursor» (Вычислять выражение под курсором).

Рисунок 2 Включение вычисления выражения под курсором при отладке в Code::Blocks
Рисунок 2 – Включение вычисления выражения под курсором при отладке в Code::Blocks

Наведите курсор мыши на переменную x в строке 6, и вы должны увидеть что-то вроде этого:

Рисунок 3 Отображение значения переменной x
Рисунок 3 – Отображение значения переменной x

Обратите внимание, что вы можете навести курсор на переменную x в любом месте, а не только в текущей строке. Например, если мы наведем курсор на x в строке 12, мы увидим то же значение:

Рисунок 4 Отображение значения переменной x при наведении на нее курсора в любом месте
Рисунок 4 – Отображение значения переменной x при наведении на нее курсора в любом месте

Если вы используете Visual Studio, вы также можете использовать Быструю проверку (QuickWatch). Выделите имя переменной x с помощью мыши, а затем выберите Быстрая проверка (QuickWatch) из контекстного меню.

Рисунок 5 Меню вызова окна быстрой проверки значения переменой в Visual Studio
Рисунок 5 – Меню вызова окна быстрой проверки значения переменой в Visual Studio

Это вызовет окно, содержащее текущее значение переменной:

Рисунок 6 Окно быстрой проверки значения переменой в Visual Studio
Рисунок 6 – Окно быстрой проверки значения переменой в Visual Studio

Закройте окно быстрой проверки, если вы его открыли.

Теперь давайте посмотрим, как изменяется эта переменная по мере выполнения программы. Либо выполните два шага, либо выполнение до курсора на строке 9. Переменная x теперь должна иметь значение 3. Проверьте ее и убедитесь, что это так!

Рисунок 7 Отображение измененного значения переменной x
Рисунок 7 – Отображение измененного значения переменной x

Окно просмотра

Использование методов с наведением курсора или окна быстрой проверки для отслеживания переменных – это нормально, если вы хотите узнать значение переменной в определенный момент времени, но это не особенно хорошо подходит для наблюдения за изменением значения переменной при запуске кода, потому что вам постоянно приходится повторно выбирать / наводить курсор на переменную.

Чтобы решить эту проблему, все современные встроенные отладчики предоставляют еще одну функцию, называемую окном просмотра. Окно просмотра (watch window) – это окно, в котором вы можете добавлять переменные, которые вы хотели бы постоянно отслеживать, и эти переменные будут в нем обновляться по мере выполнения вашей программы. Окно просмотра может уже быть на вашем экране, когда вы входите в режим отладки, но если это не так, вы можете вызвать его с помощью команд управления окнами IDE (обычно они находятся в меню View (Вид) или Debug (Отладка)).

Для пользователей Visual Studio

В Visual Studio меню просмотра можно найти в меню Отладка (Debug) → Окна (Windows) → Контрольные значения (Watch) → Контрольные значения 1 (Watch 1). Обратите внимание, что для включения этой опции вы должны находиться в режиме отладки, поэтому сначала запустите свою программу.

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

Для пользователей Code::Blocks


В Code::Blocks меню просмотра можно найти в меню Debug (Отладка) → Debugging windows (Окна отладки) → Watches (Просмотр). Это окно, скорее всего, появится отдельно. Вы можете закрепить его в главном окне, перетащив его.

Теперь вы должны увидеть что-то вроде этого:

Рисунок 8 Окно отслеживания значений переменных
Рисунок 8 – Окно отслеживания значений переменных

Окно просмотра может уже содержать или не содержать что-либо.

Обычно есть два разных способа добавить переменные в окно просмотра:

  1. откройте окно просмотра и введите имя переменной, которую вы хотите отслеживать, в крайнем левом столбце окна просмотра.
  2. в окне редактора кода кликните правой кнопкой мыши на переменной, которую вы хотите отслеживать, и выберите «Добавить контрольное значение» (Add Watch) (Visual Studio) или «Watch x» (Отслеживать x) (замените x на имя своей переменной) (Code::Blocks).

Если вы еще не находитесь в сеансе отладки с маркером выполнения в строке 9 вашей программы, запустите новый сеанс отладки и запустите выполнение до курсора на строке 9.

Теперь добавьте переменную «x» в свой список отслеживания. Вы должны увидеть следующее:

Рисунок 9 Значение переменной x в окне отслеживания
Рисунок 9 – Значение переменной x в окне отслеживания

Теперь сделайте два шага с обходом или запустите выполнение до курсора на строке 12, и вы увидите, что значение x изменилось с 3 на 6.

Переменные, выходящие за пределы области видимости (например, локальная переменная внутри функции, из которой уже был выполнен возврат к вызывающей стороне), останутся в вашем окне просмотра, но, как правило, будут либо помечены как «недоступные», либо могут отображать последнее известное значение, но выделенное серым цветом. Если переменная возвращается в область видимости (например, функция вызывается снова), ее значение снова начинает отображаться. Таким образом, можно оставить переменные в окне просмотра, даже если они находятся вне области видимости.

Использование окна просмотра – лучший способ наблюдать за изменением значения переменной с течением времени по мере выполнения программы.

Окно просмотра также может вычислять выражения

Окно просмотра также позволяет вам вычислять простые выражения. Если вы еще этого не сделали, запустите выполнение до курсора на строке 12. Затем попробуйте ввести x + 2 в окно просмотра и посмотрите, что произойдет (результат должен быть равен 8).

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

Предупреждение


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

Отслеживание локальных переменных

Поскольку отслеживание значений локальных переменных внутри функции является обычным делом при отладке, многие отладчики предоставляют способ быстро просмотреть значение всех локальных переменных в области видимости.

Для пользователей Visual Studio


В Visual Studio вы можете увидеть значение всех локальных переменных в окне Локальные (Locals), которое можно найти в меню Отладка (Debug) → Окна (Windows) → Локальные (Locals). Обратите внимание, что вы должны находиться в сеансе отладки, чтобы активировать это окно.

Для пользователей Code::Blocks


В Code::Blocks это интегрировано в окно Watch (Просмотр) в узле Locals (Локальные переменные). Если вы их не видите, значит, их либо нет, либо вам нужно развернуть узел.

Если вы просто хотите посмотреть значение локальной переменной, сначала проверьте окно локальных переменных. Она уже должна быть там.

Теги

C++ / CppCode::BlocksDebugIDELearnCppVisual StudioДля начинающихОбучениеОтладкаОтладчик / DebuggerПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.