Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
63
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

Глава 21 Отладка

Предыдущую главу мы покинули, понурив голову, так и не совладав с программой P_20_1. Почему не заменяются символы в строке? — этот вопрос остался без ответа. Эх, знать бы, что творится внутри программы! Сейчас она для нас — загадочный «черный ящик», и мы видим лишь то, что входит и выходит из него. К счастью, в IDE есть средство для доступа внутрь этого «ящика», и мы воспользуемся им. Это средство называется отладчиком. Так же, как редактор текста и компилятор, отладчик встроен в интегрированную среду разработки.

Отладчик

Отладчик — это набор инструментов для исследования «потрохов» программы. Посредством отладчика можно следить за выполнением отдельных операторов, делая остановки в нужных местах или на каждой строке программы. Застопорив программу, вы сможете выяснить значения тех или иных переменных и даже изменить их. Одним словом, отладчик — это чудо-оружие!

Инструменты отладчика доступны через два пункта меню: Run — запуск и Debug — удаление багов (жучков). Программные ошибки прозвали багами — «жучками».

В пункте Run собраны команды для управления ходом выполнения программы (рис. 45).

Ctrl+F9 – Запуск в непрерывном режиме

F8 – Выполнение одного шага без захода

в процедуру

F7 – Выполнение одного шага с заходом

в процедуру

F4 – Выполнение до места установки курсора

Ctrl+F2 – Сброс программы

Рис. 45 – Пункты меню RUN для доступа к отладчику

Примечание. В данной главе показаны окна отладчика для Borland Pascal, в IDE Free Pascal они выглядят чуть иначе.

136

Глава 21

Отладка

В табл. 1 даны пояснения к пунктам этого меню.

Табл. 1 – Описание пунктов меню Run

Команда

Горячая

Пояснение

клавиша

 

 

 

 

 

Run

Ctrl+F9

Запускает программу в непрерывном режиме.

 

 

 

 

 

Выполняет одну строку программы (шаг). Если в

 

 

строке есть вызов процедуры, то останов

Trace into

F7

происходит на входе в нее, — так можно «войти»

 

 

внутрь процедуры и следить за ходом её

 

 

выполнения.

 

 

Выполняет одну строку программы. Если в

Step over

F8

строке есть вызов процедуры, то процедура

 

 

выполняется целиком, без остановки.

 

 

Выполняет программу, пока не будет достигнута

Go to cursor

F4

строка, где установлен текстовый курсор. Курсор

надо предварительно установить на нужной

 

 

 

 

строке!

 

 

 

 

 

Сброс программы. Если программа остановлена

Program Reset

Ctrl+F2

в пошаговом режиме, она перейдет в исходное

 

 

состояние.

 

нет

Используется для отладки программ,

Parameters...

принимающих параметры через командную

 

 

строку.

Обратите внимание: за один шаг отладки выполняется либо одна строка программы, либо один оператор, если он занимает несколько строк. Стало быть, операторы, помещенные в одной строке, будут выполнены за один шаг. Если компилятору безразлично, как вы располагаете операторы, но при отладке это важно. Не размещайте операторы в одной строке, если при отладке намерены выполнять их раздельно.

Теперь обратимся к пункту меню Debug (рис. 46), где собраны команды для просмотра переменных, их редактирования, а также для просмотра выводимых программой результатов. Эти результаты можно увидеть либо на экране (User screen) либо в специальном окне (Output). Рядом с командами показаны соответствующие им горячие комбинации клавиш.

137

Глава 21

Отладка

Вызов окна обзора переменных

Вызов окна вывода программы (показывается содержимое экрана)

Alt+F5 – Показ экрана (окна прячутся)

Ctrl+F4 – Редактирование

переменных

Ctrl+F7 – Добавить переменную в

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

окно обзора

останова (Ctrl+F8)

Рис. 46 – Пункт меню Debug для просмотра результатов работы программы

Теперь испробуем основные команды отладчика на своей программе.

Жучки, вылезайте!

Итак, приступим к поиску жучков, притаившихся в программе P_20_1. Хорошо бы проследить за изменением переменных в ходе выполнения программы. Для этого вставим переменные в окно обзора «Watches». Откомпилировав программу, поместите курсор под переменной k и нажмите Ctrl+F7. Появится диалоговое окно для добавления переменной в окно обзора (рис. 47).

Рис. 47 – Добавление переменной в окно обзора

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

138

Глава 21

Отладка

Рис. 48 – Окно обзора переменных Watches

Пока программа не запущена, напротив имен переменных выводится сообщение о невозможности доступа к ним, — пусть вас это не смущает. Лучше взгляните на то, как расположено окно «Watches». Сейчас оно занимает нижнюю часть экрана и закрывает собой часть окна с программой. Это неудобно, а посему обратитесь к пункту меню Window à Tile (Окна à Рядом) как показано на рис. 49.

Расположить окна рядом плиткой»)

Рис. 49 – Пункт меню Window à Tile

В результате окна с текстом программы и списком переменных поместятся, не перекрывая друг друга (рис. 50). То же самое можно сделать и мышкой, перетаскивая и меняя размеры окон.

Теперь станем выполнять программу по шагам, следя за изменением переменных. Вместо привычной комбинации Ctrl+F9, для пуска программы в пошаговом режиме нажимают клавишу F7 (команда Run à Trace). Тогда отладчик остановит программу перед первым оператором, подсветив его особым образом. Последующие нажатия клавиши F7 заставят выполняться следующие строки программы, и очередная строка будет выделяться цветной полоской.

Нажав клавишу F7 четыре раза, мы достигнем оператора Readln, — здесь программа остановится в ожидании ввода строки. Введите как обычно строку из латинских букв «QAAAW» и нажмите Enter, — и тогда программа остановится перед входом в процедуру Scan, как показано на рис. 50.

Примечание. В отладчике IDE Free Pascal при вводе строки необходимо нажать клавишу Enter дважды.

139

Глава 21

Отладка

Рис. 50 – Состояние программы перед входом в процедуру Scan

В этом месте рассмотрим переменные в окне «Watches». Счетчик циклов k равен единице, — это глобальная переменная k, поскольку локальной переменной с этим же именем пока не существует. Переменная S содержит то, что мы ввели с клавиатуры. Параметр arg тоже пока не виден отладчику, о чём говорит сообщение «Unknown identifier».

Нажмите клавишу F7 ещё пару раз, пока цветная полоска не перескочит внутрь процедуры Scan. Здесь параметр arg примет то же значение, что и глобальная переменная S, — это прекрасно видно в отладчике. Продолжайте нажимать клавишу F7, пока цветная полоска не дойдет до слова END в конце процедуры. Вы увидите, как параметр arg постепенно принимает значение «QBBBW», — это то, что нам нужно. Состояние программы в этот момент показано на рис. 51.

Фактический параметр

Формальный параметр

Рис. 51 – Состояние программы перед выходом из процедуры Scan

140

Соседние файлы в папке delphi