Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR1_Informatika.doc
Скачиваний:
9
Добавлен:
27.03.2015
Размер:
465.41 Кб
Скачать
      1. Окно Watch

Окно Watch (Alt+3) позволяет просматривать значения любых переменных и выражений. Их можно размещать на любой из четырёх закладок (Watch 1, Watch 2, Watch 3 или Watch 4). Добавить переменную или выражение в окно Watch можно одним из следующих способов:

  1. Ввести с клавиатуры.

  2. Перетащить из окна редактора (для этого нужно предварительно выделить нужную переменную или выражение) или из окна Variables.

  3. Добавить из окна Quick watch (см. ниже).

Чтобы изменить значение переменной, так же, как и в окне Variables, достаточно сделать двойной щелчок на старом значении и ввести новое. Значение выражений изменять нельзя. Чтобы узнать тип переменной или выражения, нужно щёлкнуть по ним правой кнопкой и выбрать Properties из всплывающего меню.

      1. Окно Call Stack

Окно Call Stack (Alt+7) показывает последовательность вызванных функций (стек вызовов). Используя контекстное меню, можно отобразить также типы (команда Parameter Types) и значения (команда Parameter Values) параметров этих функций. К тексту любой функции можно переместиться, сделав двойной щелчок на её имени. Кроме того, точки останова можно ставить прямо в этом окне.

    1. Диалоги отладчика

Диалоги отладчика предоставляют ряд дополнительных возможностей. Все они вызываются из меню Debug.

Quick Watch - этот диалог имеет возможности, аналогичные возможностям окна Watch, с той разницей, что в нём можно просматривать только одну переменную за раз. Используется, когда вам не хочется добавлять переменную в окно Watch. Его можно вызвать, используя комбинацию Shift+F9.

Exceptions - этот диалог позволяет настроить реакцию отладчика на возникновение системных и пользовательских исключений. Для каждого исключения можно выбрать действие Stop always (останавливаться всегда) или Stop if not handled (останавливаться, если исключение не обработано).

Threads - этот диалог показывает список потоков, созданных вашей программой. Позволяет приостановить (suspend) или продолжить (resume) любой поток, а также установить на него фокус (то есть сделать его текущим). Этот диалог – практически единственное средство для отладки многопоточных приложений, которое предоставляет Visual C++.

Modules - этот диалог показывает список загруженных модулей. Для каждого модуля выводится диапазон адресов и имя файла.

    1. Edit and Continue

Функция Edit and Continue впервые появилась в Visual C++ 6.0. С её помощью вы можете вносить изменения в код программы и перестраивать её, не прерывая сеанса отладки.

Для этого достаточно вызвать команду Apply code changes из меню Debug (или нажать Alt+F10), после того как вы подправили исходные тексты. Более того, Visual C++ может вызывать для вас эту команду автоматически. Это будет происходить, если в окне Tools->Options на закладке Debug установить флаг Debug commands invoke Edit and Continue.

    1. Пример отладки приложения

В этом разделе мы перейдём от теории к практике и рассмотрим пример отладки на простейшей программе. Создайте новый файл .cpp с текстом, приведенным ниже и запустите на выполнение (F7).

#include <stdio.h>

void main()

{

int sum;

for(int i=1; i<5;i++)

sum=sum+i;

printf("%d\n",sum);

}

Ниже приведен пример окна приложения, в случае если в программе найдена ошибка (рис.16). Для того чтобы перейти на ошибку в тексте программы необходимо дважды щелкнуть на сообщении об ошибке (строка, выделенная синим цветом). Тогда появится синяя стрелочка на строку в тексте программы, где была обнаружена ошибка. В данном случае она указывает на строку printf("%d\n",sum). Хотя ошибка в предыдущей строке, компилятор обнаружил ее в тот момент, когда перешел на следующую инструкцию.

Рис.16. Окно программы в случае нахождения ошибки на этапе компиляции

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

Как Вы видите, программа должна считать сумму чисел от 0 до 4. Т.е. на экран должен быть выведен результат 10. Однако ответ отличается от предполагаемого результата.

Воспользуемся средствами отладки. Посмотрим, что записывается в переменную sumна каждом шагеfor. Для этого поставим позиционную точку останова, нажавF9 в тот момент, когда курсор находится на седьмой строке:sum=sum+i то же самое получится, если нажать кнопку с белой рукой. В левом поле появится коричневый круг – знак точки останова. Затем запускаем отладчик, нажавF5 (Goв менюDebug). Отладчик останавливается на определенной нами точке останова – строке 7 (рис.17).

Рис.17. Отладка программы

В нижней части экрана в окне Variables мы видим значения переменных до выполнения инструкций в строке 7. И сразу становится понятно, в чем ошибка. Значение переменной sum не равно нулю как предполагалось. Это связано с тем, что при выделении памяти под переменную в Си ее начальные значения определяются случайным содержимым ячеек, которые находятся по данному адресу. Таким образом, чтобы устранить ошибку достаточно вставить начальную инициализацию переменной sum.

Запускаем пошаговый отладчик для перехода на следующую инструкцию Step Over (F10) – выполняется инструкция в седьмой строке, выполнение переходит к 8-й строке и т.д.

Останавливаем процесс отладки (Shift+F5). Убираем точку останова, нажав повторноF9 на седьмой строке. Вводим исправления и запускаем программу.

#include<stdio.h>

voidmain()

{int sum=0;

for(int i=1; i<5;i++)

sum=sum+i;

printf("%d\n",sum);

}

Получаем верный результат (рис.18).

Рис.18. Результат выполнения программы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]