Отправляет email-рассылки с помощью сервиса Sendsay

Всё о работе в Интернет

  Все выпуски  

Занятие 38.


Сегодняшнее наше занятие, уважаемые подписчики, посвящено средствам отладки программ.

Упомянутые средства важны при разработке особенно сложных программ. К таковым с полным правом можно отнести программы с циклами.

ОТЛАДКА ПРОГРАММЫ

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

Отладочная информация для данной программы создаётся, если в ней установлена директива компиляции {$D+}. Если, кроме того, установить директиву компиляции {$L+}, то в процессе отладки будут доступными не только переменные самой программы (глобальные), но и переменные, описанные в подпрограммах (локальные). Аналогичный эффект может быть достигнут также выполнением команды Options – Compiler..., в результате чего открывается диалоговое окно настройки компилятора Compiler Options, в котором следует установить флажки на пунктах Debug information и Local symbols поля Debugging. При этом создание отладочной информации устанавливается для ИСП в целом.

Кроме того, должна быть установлена возможность использования встроенного отладчика ИСП, что достигается выполнением команды Options – Debugger.... При этом будет открыто диалоговое окно Debugging/Browsing, в котором следует установить флажок на пункте Integrated debugging/browsing поля Symbols. В противном случае, при попытке начать процесс отладки в окне предупреждения Warning будет получено сообщение “No debug info for program entry point”.

А вот флажок с пункта Standalone debugging этого же поля следует снять, чтобы избежать увеличения EXE-файла программы за счёт добавления информации, нужной только при использовании внешнего отладчика TD.EXE.    

Отладка – специфический процесс выполнения программы, осуществляемый с приостановками.

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

Возможны следующие способы организации приостановок:

-       приостановка выполнения программы в текущей строке;

-       приостановка программы после выполнения операторов очередной строки её текста;

-       приостановка выполнения программы в предварительно установленных контрольных точках.

Отметим, что в режиме отладки выполнение программы всегда приостанавливается перед первым исполняемым оператором той строки, которая отмечена треком отладки.    

Выполнение программы с приостановкой в текущей строке реализуется посредством выполнения команды Go to cursor (<F4>).

Строка приостановки должна быть выбрана предварительно, то есть в ней должен быть установлен курсор текстового редактора ИСП.

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

Выполнение программы с приостановками после выполнения операторов каждой очередной строки её текста реализуется посредством выполнения либо команды Run –Step over (<F8>), либо команды Run – Trace into (<F7>).

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

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

Команды отличаются друг от друга тем, что при выполнении первой из них Run –Step over (<F8>) строки текстов подпрограмм не отслеживаются. Если же текущая строка содержит обращение к подпрограмме, то при выполнении второй из них Run – Trace into (<F7>) трек отладки перемещается к первому выполняемому оператору подпрограммы, после чего процесс продолжается обычным образом.

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

Как обычно, в момент приостановки есть возможность проверить и проанализировать текущие значения переменных программы.

Для предварительной установки в программе очередной контрольной точки следует сначала разместить курсор в соответствующей строке её текста, после чего выполнить команду Debug – Add breakpoint....

В результате открывается диалоговое окно Add Breakpoint, в котором предусмотрено отображение четырёх основных параметров контрольной точки:

-       наименование файла с текстом программы (File name);

-       номер строки программы, в которой установлена данная контрольная точка (Line number); 

-       условие, при котором в данной контрольной точке выполняется останов программы (Condition); если условие не указано, то, по умолчанию, для него принимается значение True (программа останавливается всегда);

-       количество пропусков данной контрольной точки, когда программа в ней не останавливается (Pass count); по умолчанию принимается значение, равное нулю (контрольная точка не пропускается и останов в ней выполняется всегда).

Изменив, при необходимости, параметры Condition и Pass count, нажимаем кнопку OK, после чего контрольная точка оказывается установленной. Фон соответствующей строки текста программы при этом выделяется альтернативным цветом.

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

Если необходимость изменения параметров Condition и Pass count отсутствует, и программиста удовлетворяют их значения по умолчанию, то для установки в тексте программы контрольной точки без открытия диалогового окна Add Breakpoint достаточно нажать клавиши <Ctrl + F8>.

Выполнение программы с приостановкой в каждой очередной контрольной её точке можно реализовать посредством выполнения либо команды Run – Run (<Ctrl + F9>), либо команды Go to cursor (<F4>).

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

Диалоговое окно Breakpoints является общим для всех программ, окна которых открыты в редакторе ИСП. В нём по каждой контрольной точке в виде таблицы представлены упомянутые выше её четыре параметра: наименование файла с текстом программы (Breakpoint list), номер строки программы с контрольной точкой (Line #), условие останова программы (Condition) и количество пропусков данной контрольной точки (Pass).

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

-       Кнопка Edit для вызова дополнительного диалогового окна Edit Breakpoint, средствами которого можно отредактировать все четыре параметра (Condition, Pass count, File name, Line number) выбранной контрольной точки. Завершив редактирование, следует нажать кнопку Modify (<Enter>). Отказаться от редактирования можно нажатием кнопки Cancel (<Esc>). Если же нажать кнопку New, то можно получить новую контрольную точку с отредактированными параметрами. 

-       Кнопка Delete для удаления из текста программы выбранной контрольной точки. 

-       Кнопка View для перемещения курсора к выбранной контрольной точке в тексте программы.

-       Кнопка Clear all для удаления из текста программы всех контрольных точек. При этом появляется дополнительное диалоговое окно подтверждения Confirmation, в котором следует нажать одну из кнопок Yes – “Да, удалить” или No – “Нет, не удалять”. 

Отказаться от текущего сеанса отладки программы можно посредством выбора команды Run – Program reset (<Ctrl + F2>). Снять контрольную точку в строке текста программы можно, установив в ней текстовый курсор и нажав клавиши <Ctrl + F8>. При этом трек отладки программы снимается. В контрольной точке снимается выделение фона строки текста программы.

В момент приостановки процесса выполнения программы программисту доступны следующие средства контроля текущих значений переменных программы:

-       окно Call stack с информацией о текущем состоянии программного стека;

-       окно наблюдения Watches, в котором могут отображаться текущие значения заданных переменных или выражений;

-       окно выполнения программы Output;

-       окно оперативного контроля и модификации значений переменных отлаживаемой программы Evaluate and Modify.

Открытие окна Call stack с информацией о текущем состоянии программного стека осуществляется посредством выбра команды Debug – Call stack. В процессе отладки программы в этом окне отображаются вызовы подпрограмм с конкретными значениями фактических параметров обращения. 

Окно наблюдения за текущими значениями заданных переменных и выражений Watches можно открыть, выполнив команду Debug – Wath. Предварительно переменную или выражение для наблюдения в окне Watches следует ввести через диалоговое окно Add Watch, открыв его посредством выполнения команды Debug – Add watch....

Окно выполнения программы Output можно открыть посредством выполнения либо команды Debug – Output, либо команды Debug – User screen (<Alt + F5>). Первый вариант Debug – Output удобен возможностью одновременного расположения на экране и окна редактора, и окна выполнения программы. Второй вариант Debug – User screen (<Alt + F5>) позволяет получить окно выполнения программы в полноэкранном режиме.

Диалоговое окно оперативного контроля и модификации значений переменных отлаживаемой программы Evaluate and Modify можно открыть посредством выбора команды Debug – Evaluate / modify... (<Ctrl + F4>).

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

Порядок работы с диалоговым окном Evaluate and Modify состоит в том, что в поле Expression (выражение) вводят выражение и нажимают клавишу <Enter>, после чего в поле Result (результат) будет получено его значение. При этом возможны варианты:

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

-       для выражений, использующих именованные константы, необходима предварительная компиляция соответствующей программы;

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

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

-       h – получение значения результата в виде шестнадцатеричного числа;

-       m – получение результата в виде последовательности шестнадцатеричных значений отдельных байтов, начиная с младшего;

-       r – получение списка полей записи с указанием их значений.   

Средствами диалогового окна Evaluate and Modify можно искусственно изменить текущее значение той или иной переменной, после чего продолжить процесс отладки программы обычным образом. Для этого в поле Expression сначала следует указать нужную переменную, в поле New value – её новое значение, а затем нажать кнопку Modify.   

Для выхода из диалогового окна Evaluate and Modify следует использовать кнопку Cancel либо клавишу <Esc>.

Уважаемые подписчики! При необходимости задать вопрос, проконсультироваться, уточнить или обсудить что-либо обращайтесь через Гостевую книгу моего персонального сайта http://a-morgun.narod.ru. При этом настоятельно рекомендую пользоваться браузером Internet Explorer.

С уважением, Александр.


В избранное