|
Программирование >> Процедурные приложения
Как видно из рис. 3.15, в окне редактирования появилась стрелка (ее называют индикатором трассировки), указывающая на строку программы, которая будет выполнена на следующем шаге. В данный момент она указывает на функцию print them(). Рис. 3.15. Окно редактирования после того, как трижды была выполнена команда StepInto или StepOver Имеет смысл выполнить эту функцию как одно целое. Для этого выберем команду StepOver. Функция будет выполнена, и индикатор трассировки укажет на первый вызов функции printf(). Теперь три раза нажмите клавишу [F10], пока стрелка не остановится напротив функции scanf(). В этот момент вам нужно перейти в окно программы и в ответ на приглашение Would you like to continue(Y/N) ввести Y и нажать [Enter] (рис. 3.16). Сразу после этого на экране появится сообщение об ошибке (рис. 3.17). Это сообщение было сгенерировано программой после попытки выполнит функцию scanf(). Давайте попытаемся разобраться, в чем, собственно, состоит проблема.
Uelcone to а trace denonstration! Uould ifou like to continue (.Ч/Юу Рис. 3.16. Введите Y и нажмите [Enter], чтобы продолжить выполнение программы Рис. 3.17. Отладчик сообщает об ошибке в программе Ошибка связана с некорректным использованием функции scanf(). Функция scanf () ожидает указания адреса ячейки памяти для заполнения. Рассмотрим такое выражение: scanf( %C , continu); Как видите, здесь указывается не адрес переменной, а сама переменная. Чтобы указать адрес, нужно поместить оператор взятия адреса (&) перед continu. Внесите исправления в выражение, чтобы оно выглядело следующим образом: scanf( %C , &continu); Сохраните файл и вновь выберите команду RebuildAll. Дополнительные средства отладки Вы, очевидно, слышали о точках останова, которые применяются в программе при необходимости прервать ее выполнение в определенных местах. Смысл использования точек останова состоит в том, что отладчик не тратит времени на пошаговое выполнение программы вплоть до указанной точки, по достижении которой переходит в пошаговый режим. Точки останова проще всего расставлять с помощью кнопки Breakpoint (первая справа) панели инструментов Build. Для этого достаточно установить курсор на нужной строке программы и щелкнуть на указанной кнопке. Если же выделенная строка уже содержит точку останова, то после щелчка на кнопке Breakpoint она, точка останова, будет удалена. При выборе команды Go программа будет выполняться от текущего местоположения курсора до ближайшей точки останова. Обратимся к нашей программе. Мы знаем, что все строки программы до вызова функции scanf() отлично работают. Чтобы не тратить время на пошаговое выполнение всех строк, которые уже были проверены ранее, поставим точку останова на 20-й строке, содержащей вызов функции scanf(). Имеется и другой способ задания точек останова - с помощью диалогового окна Breakpoints(рис. 3.18), вызываемого командой Breakpoints... из меню Edit. По умолчанию при щелчке на кнопке со стрелкой открывается контекстное меню, в котором первым пунктом указывается команда создания точки останова на той строке, где в данный момент в окне редактирования находится курсор. В нашем случае это строка 20. Рис. 3.18. Задание точки останова Работа с точками останова Предположим, что вы поставили точку останова в строке программы, содержащей вызов функции scanf{). Теперь выберите команду Go- либо из меню, либо нажав клавишу [F5]. Обратите внимание, что выполнение программы прерывается не на первой строке программы, а на строке, содержащей точку останова. Далее можно продолжить выполнение программы в пошаговом режиме либо проанализировать текущие значения переменных. Нас интересует, будет ли функция scanf() работать корректно после того, как в программный код были внесены изменения. Выберите команду StepOver, перейдите к окну программы, введите букву Y в верхнем регистре и нажмите клавишу [Enter]. (Мы применили команду StepOverдля того, чтобы избежать пошагового анализа отладчиком всех операторов функции scanf(). При выборе команды StepIn появляется предложение указать местонахождение файла SCANF.C) Все отлично! Отладчик не выдал окна с сообщением об ошибке. Но означает ли это, что все проблемы разрешены? Чтобы ответить на этот вопрос, достаточно будет проанализировать текущее значение переменной continu. Окно QuickWatch Команда QuickWatch... открывает диалоговое окно QuickWatch(рис. 3.19), которое позволяет по ходу выполнения программы анализировать значения переменных. Простейший способ определить значение переменной с помощью данного окна состоит в том, что курсор помещается на имени переменной в окне редактирования, а затем нажимается комбинация клавиш [Shift+F9]. Проделайте указанную операцию с переменной continu.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |