Информатика на пять О нас
 Добавить в избранное
5byte.ru
 Теория
 8 класс
 9 класс
 10 класс
 11 класс
Задания
 8 класс
 9 класс
 10 класс
 11 класс
Книги
Тесты
ЕГЭ
Turbo Pascal 7
 Описание
 Задачи
HTML
Рефераты

17.8. Отладка программы в интегрированной среде

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

  • синтаксические, возникающие в результате нарушения правил написания предложений языка;
  • семантические, связанные с недопустимыми значениями параметров, недопустимыми действиями над параметрами и т. д.; выявляются эти ошибки во время работы программы (обычно на этапе отладки);
  • логические ошибки, связанные с неправильным использованием тех или иных алгоритмических конструкций; эти ошибки приводят к неправильным результатам при работе программы (часто не во всех случаях, а только при определенном сочетании параметров), но нарушение работы программы не вызывают.

Отладка предполагает выполнение следующих моментов:

  • выявление факта наличия ошибки в программе;
  • определение места нахождения ошибки (локализация);
  • устранение ошибки.

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

Наиболее сложно выявляются ошибки второго и особенно третьего типа. Выявлению ошибок второго типа часто помогает использование ключей компилятора (см. п. 17.7), позволяющих проверять допустимые значения тех или иных параметров (границы индексов элементов массивов, границы типа-диапазона, переполнение стека, ошибки ввода-вывода и т. д.). Ключи задаются либо в программе, либо с помощью меню Options (см. п. 17.5.8).

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

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

Для этой цели можно использовать меню Debug (см. п. 17.5.6) и Run (см. п. 17.5.4) или соответствующие клавиши быстрого управления. Для того чтобы отладчик работал, должны быть установлены ключи компилятора {$D+,L+} (см. п. 17.7.1), которые выбираются по умолчанию.

17.8.1. Получение значений параметров, модификация параметров

Для получения значений тех или иных параметров имеется ряд возможностей. Самый простой способ - запрограммировать получение значения того или иного параметра непосредственно в программе, используя операторы Write или WriteLn (т. н. отладочная печать). Для того чтобы содержимое экрана пользователя не было сразу же заменено тем или иным экраном среды, можно сразу же после такого оператора поставить оператор ReadLn, с тем чтобы программа остановилась до момента нажатия клавиши Enter. Вместо этого оператора можно использовать соответствующие процедуры и функции стандартного модуля Crt. Если же эти меры не предприняты и тем не менее необходимо посмотреть значения выводимых параметров, можно воспользоваться командой меню Debug | User screen (см. п. 17.5.6) или клавишами быстрого управления Alt+F5. Этим методом следует пользоваться в тех случаях, когда выводимые параметры необходимы не только для отладки, но и сами по себе (например, являются выходными параметрами программы), т. к. есть и другие простые способы получения значений параметров программы без искажения ее текста.

Те или иные параметры можно постоянно контролировать, используя окно отладки (см. п. 17.3.3). В это окно с помощью команд подменю Debug|Watch (см. п. 17.5.6) можно поместить контролируемый параметр, удалить параметр, отредактировать его, удалить все параметры. При задании параметра можно после его имени через запятую указать число выводимых параметров и формат представления данных. Возможные форматы приведены в табл. 44.

Таблица 44. Форматы представления данных

Формат Назначение
С

S

D
$, Н или X
Fn

М


Р
R
Представление управляющих символов с кодами от 0 до 31 специальными символами. Используется с форматом М
Представление управляющих символов с кодами от 0 до 31 в форме #Х. Используется с форматом М
Представление целых чисел в десятичной системе счисления
Представление целых чисел в шестнадцатеричной системе счисления
Представление вещественного числа с n значащими цифрами (значение n может находиться в пределах от 2 до 18, по умолчанию - 11)
Представление области памяти (дампа). Начало области задается адресом параметра. Данные представляются побайтно в шестнадцатеричной системе счисления. Для изменения формы представления данных можно воспользоваться дополнительно форматами D, $, Н, X, S, С
Представление значения указателя
Представление записи или объекта с указанием полей

Пример. Имеется типизированная константа

const A: array[1..5] of Byte = (20,41,22,43,44);

Использование различных форматов даст следующие результаты:
А                 (20,41,22,43,44)
А[1]             20
А[1],3          20,41,22
А[1],М         14
А,М              14,29,16,2В,2С
A,3MD         20,41,22
А,ЗМ$          $14,$29,$16
А[1],ЗМС      p ')'
A[1],3MS      #20')'#22

Эти же операции можно выполнить и непосредственно из окна отладки, подведя курсор "мыши" к строке с параметром, который следует отредактировать, добавить или удалить, и дважды нажать левую клавишу "мыши". Будет открыто окно, в котором можно отредактировать требуемый параметр. Открыть окно для редактирования параметра можно также с помощью клавиши Enter или Insert. В течение работы программы параметры, находящиеся в окне, будут вычисляться при каждой приостановке ее работы. Следует иметь в виду, что если несколько параметров программы имеют одно и то же имя, например глобальный параметр программы и локальный параметр подпрограммы, то в окне будет показано зна- чение того параметра, с которым в данный момент происходит работа. Так если выполняется подпрограмма, то будет показано значение ее локально^ параметра, в остальных случаях - значение глобального параметра. Если тот или иной параметр не определен, например локальный параметр подпрограммы вне этой подпрограммы или вообще задан несуществующий параметр, будет выдано соответствующее сообщение (Unknown identifier - неизвестный идентификатор)

Для получения значения того или иного выражения можно также использовать команду меню Debug | Evaluate/Modify. По этой команде выводится окно диалога (см. п. 17.3.2), с помощью которого можно задать выражение, значение которого тут же вычисляется. Более того, можно модифицировать интересующий параметр (например, изменить значение параметра цикла). В отличие от предыдущего способа получения значений параметров в данном случае параметр вычисляется только один раз.

17.8.2. Приостановка работы программы

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

Можно задать точки останова в программе. Для этого следует поместить курсор на той строке, где следует остановить программу, и выполнить команду локального меню Toggle breakpoint (см. п. 17.5.11). Количество точек останова может быть любым. После запуска программы командой Run | Run (см. п. 17.5.4) вычислительный процесс приостановится на первой встреченной точке останова. Продолжение работы осуществляется повторным запуском программы командой Run | Run (при этом программа запустится не с начала, а от точки останова) либо одной из команд меню Run: Run | Step over, Run | Trace into или Run | Go to cursor (см. п. 17.5.4). Если перед очередным запуском были произведены изменения в тексте программы, на экран выдается запрос, следует ли перекомпилировать программу. При утвердительном ответе программа перекомпилируется с учетом внесенных изменений и запускается с начала, в противном случае все Изменения в тексте игнорируются. Если станет очевидным, что дальнейшая отладка программы бессмысленна, можно выйти из отладчика, выполнив команду Run | Program reset (см. п. 17.5.4). Эту же команду следует выполнить, если необходимо запустить программу с начала.

Так осуществляется работа программы при задании абсолютных точек останова, когда при попадании на помеченный участок программы в любом случае происходит ее останов. Однако можно задать и точку останова, в которой вычислительный процесс остановится при выполнении определенного условия (см. например, рис. 7). Эти условия могут быть двоякого вида. Во-первых, можно просто задать условие, при выполнении которого происходит останов, в противном же случае точка останова пропускается. Во-вторых, можно задать Номер попадания в точку останова, при котором действительно произойдет останов. Например, если точка останова задана в теле цикла FOR и номер попадания задан равным максимальному значению параметра цикла (если он изменяется от единицы), то останов произойдет только при последней итерации. Задать такие точки останова можно, используя окно точек останова с помощью режима Edit. В качестве условия останова может быть использовано выражение логического типа, которое задается точно так же, как и обычное выражение языка Паскаль. Номер попадания задается числом в пределах от 0 до 32767.

Другой способ остановить в какой-то точке выполнение программы - установить в эту точку курсор и вместо команды Run | Run использовать команду Run Go to cursor. Вычислительный процесс остановится в месте расположения курсора. Продолжение работы программы можно осуществить, как и в предыдущем случае, одной из команд меню Run: Run | Run, Run | Go to cursor, Run | Trace into или Run | Step over.

Еще два способа останова программы - запуск ее одной из команд Run | Step over или Run | Trace into. При этом выполняется оператор или группа операторов, соответствующих одной строке текста программы. Эти две команды отличаются друг от друга только тем, что, если встречается подпрограмма, в случае команды Run | Trace into происходит трассировка (построчное выполнение) этой подпрограммы, а в случае команды Run | Step over подпрограмма рассматривается как один единый оператор. Если трассируемая подпрограмма находится в другом файле, даже неоткрытом, в случае необходимости он будет вызван в соответствующее окно редактирования. Трассировка подпрограмм стандартных модулей не осуществляется.

Наконец, программу можно остановить с помощью комбинации клавиш Ctrl+Break. Она остановится в том месте, где ее застало нажатие этих клавиш. Такая остановка может понадобиться, если программа начала заведомо неправильно работать: выдает неправильные результаты, зациклилась и т. д.

17.8.3. Работа с подпрограммами

Отладчик представляет ряд возможностей работы с подпрограммами. Во-первых, как уже указывалось выше, можно осуществлять трассировку подпрограмм (их построчное выполнение) с помощью команды меню Run | Trace into (см. п. 17.5.4). Во-вторых, имеется возможность найти расположение подпрограммы в одном из файлов (даже неоткрытом). Это может потребоваться, чтобы посмотреть текст подпрограммы, ее локальные параметры и т. д. Найти расположение подпрограммы можно с помощью команды меню Search | Find procedure (см. п. 17.5.3). Наконец, в-третьих, можно воспользоваться окном используемых подпрограмм, которое вызывается командой меню Debug I Call stack (см. п. 17.5.6). В этом окне можно проследить путь, по которому управление было передано в конкретную подпрограмму.





 У Вас есть материал пишите нам
 
    Copyright © 2008    
  Top.Mail.Ru