Плещев В.В. Высокоуровневые методы информатики и программирования - файл n1.docx

приобрести
Плещев В.В. Высокоуровневые методы информатики и программирования
скачать (6381.5 kb.)
Доступные файлы (1):
n1.docx6382kb.08.07.2012 21:25скачать

n1.docx

1   2   3   4   5   6   7   8   9   ...   27


1.3. Структура и этапы разработки проекта

1.3.1. Структура проекта

1.3.1.1. Основные типы файлов


Проект содержит все создаваемые компоненты приложения, которые объединяются перед выполнением в один автономно исполняемый файл типа .EXE. Параметры проекта можно настроить командой Project/Options.

Delphi создает следующие основные типы файлов проекта.

Проект (.dpr)  головная программа с описанием форм, модулей и команды запуска приложения. С головной программы приложения начинается и заканчивается выполнение приложения.

Модуль (.pas) - программный файл с описанием одной формы или отдельный модуль, не связанный с формой.

Форма (.dfm)  двоичный файл с детальным описанием формы.

Опции проекта (.dof)  установки опций проекта.

Конфигурация проекта (.cfg)  директивы компилятора и параметры настройки проекта.

Ресурс (.res)  бинарный файл с ресурсами проекта.

Группа файлов (.bpg)  описание группы файлов.

Резервная копия (.~dp,.~df,.~pa)  исходные резервные копии.

Динамически создаваемая библиотека (.dll).

Объектный модуль (.dcu)  откомпилированный файл модуля (.pas).

Исполняемый файл (.exe)  автономно исполняемый файл приложения, для которого больше ничего не требуется, если не используются файлы DLL, OCX.

Рекомендуется хранить проект в отдельном каталоге. Чтобы сохранить весь проект на диске, выполняется команда File/Save All, и далее пользователем указываются имена проекта, модулей (или оставляются умалчиваемые имена) и каталога, в котором сохраняется проект.

1.3.1.2. Файлы ресурсов


Каждый проект имеет одноименный файл ресурсов (.res), содержимое которого включается при компиляции в выполняемый файл. Для добавления в ресурсный файл графики используется программа Image Editor, встроенная в среду Delphi. Добавление строк осуществляется включением в модуль раздела Resourcestring (п.1.3.4) с описанием нужных строк, используемые в программе как константные выражения.

Пример строк ресурсов с наименованием и значением коэффициента налога на добавленную стоимость:

Resourcestring //раздел ресурсов

NameNds='Налог на добавленную стоимость'; //наименование налога

Nds='0,2'; //коэффициент налога на добавленную стоимость ...

Label1.Caption:= NameNds+’ ‘+FloatToStr(Stoimost*StrToFloat(Nds));//НДС

Каждой строке при компиляции автоматически присваивается идентификатор (номер), который используется в некоторых функциях и в конcтрукторах исключений (п.1.6.3), который можно увидеть в текстовом варианте файла ресурса .Drc.

Для получения текстового файла ресурсов следует выполнить диалоговую команду Project/Options/Linker, включить опцию Detailed Map File и выполнить компиляцию. В результате сформируется одноименный проекту текстовый файл с расширением .Drc с описанием строк всех ресурсов, включая и строки предыдущего примера, в виде:

#define Unit1_NameNds 65361

#define Unit1_Nds 65362

STRINGTABLE

BEGIN

Unit1_NameNds, “Налог на добавленную стоимость”

Unit1_Nds, “0,2”

END

Строки #define содержат идентификаторы (номера) строк ресурсов. Файлы ресурсов (.dfm, drc) можно увидеть, использую команду View/Translation Manager.

1.3.2. Программа

1.3.2.1. Структура программы


Программа состоит из разделов: заголовка, описания меток (Label), констант (Const), типов (Type), переменных (Var), подпрограмм (процедур, функций), операторов (Begin). Каждый раздел начинается с его имени. Все разделы, кроме раздела операторов, не обязательны. В отличие от стандартного Паскаля разделы меток, констант, типов и переменных могут следовать в любом порядке и встречаться более одного раза.

Заголовок программы имеет вид: Program <имя программы>;

Метка  это произвольный идентификатор или целое число без знака, которое указывается перед оператором и отделяется от него двоеточием, что позволяет использовать метку в командах перехода Goto.

Правила использования метки: метка, используемая в Goto, должна быть указана в разделе меток и в разделе операторов; невозможна передача управления извне подпрограммы на метку, объявленную в подпрограмме.

1.3.2.2. Структура головной программы проекта


Текст головной программы можно вывести на экран командой View/Project Source, и он обычно имеет следующую структуру:

program Project1; //имя исходного и исполняемого файла проекта

uses //заголовок списка модулей, загружаемых головной программой

Forms, //системный модуль работы с формами

Unit1 in ‘Unit1.pas’ {Form1}, //модуль Unit1 с описанием формы Form1

Unit2 in ‘Unit2.pas’ {Form2}; //модуль Unit2 с описанием формы Form2

{$R *.RES} //директива компилятора связывания ресурсов в файл типа .Res

<объявление переменных, констант и подпрограмм доступных в проекте>

begin //начало тела головной программы

Application.Initialize; //инициализация приложения

Application.CreateForm(TForm1, Form1); //создание первой формы Form1

Application.CreateForm(TForm2, Form2); //создание второй формы Form2

Application.Run; //выполнение приложения

end. //окончание программы

1.3.3. Подпрограммы

1.3.3.1. Типы подпрограмм


Подпрограмма  это именованная, логически законченная часть программы, предназначенная для выполнения определенных действий и вызываемая по ее имени. Команда вызова подпрограммы имеет вид:

<имя подпрограммы>[(<аргументы через запятую>)]; [<способ вызова>;]

<способ вызова>  способы нестандартного вызова подпрограммы:

Delphi  параметры помещаются в стек оперативной памяти;

Cdec  подпрограмма написана на C++ (DLL  библиотеки С++);

Stdcall  в соответствии с соглашениями Windows;

Safecall используется при работе с компонентными технологиями.

Имеются два типа подпрограмм: процедуры и функции. Подпрограмма имеет структуру, аналогичную структуре программы, но заголовок у подпрограммы свой.

Раздел описаний подпрограмм содержит тексты процедур и функций. В разделе операторов (Begin) указываются операторы, которые собственно и составляют алгоритм. Раздел, а следовательно, и программа заканчиваются словом End. Допускается вложенность подпрограмм.

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

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

Процедуры и функции делятся на стандартные и пользовательские.

Стандартные процедуры и функции имеются в самом Паскале и не требуют дополнительного описания.

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

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

1.3.3.2. Процедуры и функции, определенные пользователем


Процедура и функция пользователя начинаются с заголовков вида, соответственно:

Procedure <имя процедуры> [(<параметры>)];

Function <имя функции> [(<параметры>)] : <тип результата>;

Возвращаемое значение формируется одной из равнозначных команд: <имя функции>: = <значение> или Result:=<значение>.

Предопределенная переменная Result может быть использована в качестве операнда (Result:=X+Y; Result:=Result*C).

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

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

Параметры, переданные по значению (параметрызначения), не могут быть изменены процедурой, функцией, а параметры, переданные по ссылке, называются параметрамипеременными и могут изменить свое значение в подпрограмме. Они описываются в заголовке процедуры, функции после слова Var.

Параметры-константы описываются после слова Const. При попытке изменить значение аргумента в подпрограмме будет выдано компилятором сообщение об ошибке.

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

Не типизированный параметр не содержит указание типа, что означает возможность обработки подпрограммой аргумента любого типа. В этом случае в подпрограмме должны применяться операции приведения (преобразования) типов (п.1.2.9).

Пример. Procedure P(Var X); Begin Real (X):=Real (X)+2.1; End;

Для не типизированного параметра нельзя передавать в качестве аргумента число или не типизированную числовую константу.

Обращение к процедуре или к функции имеет вид:

<имя процедуры или функции> [(<список аргументов через запятую>)]

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

Пример:

Fuction Nalog (X : Double, Nds : Double=0.2, Imuh : Double=0.01) : Double;

... N:=Nalog(V); //вызов функции с указанием только 1 аргумента вместо 3.

// Ошибочным будет вызов функции вида: N:=Nalog(V,,0.02).

Перегрузка подпрограмм. Если определить несколько одноименных подпрограмм с различным числом или типами параметров и в конце заголовков указать слово Overload, то компилятор автоматически вызовет ту подпрограмму, которая соответствует данным аргументам.

Пример двух функции с различными типами параметров:

Function Add (X, Y: Real) : Real; Overload; Begin Result:=X+Y; End;

Function Add (X, Y: Integer) : Integer; Overload; Begin Result:=X+Y; End;

A=Add (1.3,2.1); //вызов первой функции с вещественными параметрами

A=Add (1,2); //вызов второй функции с целочисленными параметрами

Правила использования параметров и аргументов:

1. Количество неумалчиваемых параметров и аргументов совпадает.

2. Длины строк могут не совпадать, если указана директива {$V}.

3. Если типы параметров и аргументов не совпадают, то обязательно указать типы параметров в заголовке.

4. В заголовке можно использовать и указатели.

5. Параметрами могут быть открытые массивы (п.1.1.4.1).

6. Параметры типов массивов, строк и записей должны быть предварительно определены через типы пользователя, например:

Type Atype=Array [1..10] Of Real;//объявление типа массив из 10 вещ.чис.

Intype=String[15]; Outtype=String[30]; //объявление типов строк

Procedure S (A:Atype); //заголовок процедуры с параметром типа массив

Function St (S:Intype):OutType;//строковая функция с параметром строки

Пример программы возведения числа в степень:

Program Demo; //заголовок основной программы

Var Z : Integer; K : Real; //объявление переменных

Function Step (F:Real, Exp: Integer) : Real; //заголовок функции Step

Var C: Integer; T: Real; //объявление переменных функции

Begin T:=F; For C:=2 To Abs(Exp) Do T:=T*F; //цикл умножения

If Exp<0 Then Result:=1/T Else Result:=T; //формирование результата

End; //окончание тела функции

Begin Writeln (Step (2, 3),Step(5,4)) End. //операторы основной программы

Рекурсивные программы в ходе выполнения обращаются сами к себе.

Пример рекурсивной функции Factor вычисления факториала:

Procedure TForm1.Button1Click(Sender: TObject);//основная процедура

Function Factor (A:Integer) : Integer; //заголовок функции Factor

Begin If A=1 Then Result:=1 Else Result:=A*Factor(A1)End; //функция

Begin Label1.Caption:=IntToStr(Factor(10))end;//основная функциявывод10!

Предварительное описание программы. Допускается описание процедуры или функции в конце основной программы. В этом случае перед разделом операторов основной программы указывается:

<заголовок процедуры>; Forward;

Сама процедура будет описана позже без указания параметров.

1.3.4. Модули


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

Модуль имеет структуру:

Unit <имя модуля>; //заголовок модуля

Interface

<интерфейсная часть>

Resourcestring //не обязательный

<строки ресурсов>

Implementation //не обязательный

<исполняемая часть>

Initialization //не обязательный

<инициирующая часть>

Finalization //не обязательный

<завершающая часть>

End. //окончание тела модуля

Заголовок модуля состоит из зарезервированного слова UNIT и следующего за ним имени модуля. Это имя должно совпадать с именем исходного текста. Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальным предложением: Uses <список имен модулей через запятую>.

Имя модуля можно указывать в виде:

<имя модуля> [In ‘<имя файла с модулем>.pas’]

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

Строки ресурсов содержат описания строк ресурсов (п.1.3.1.2).

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

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

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

Unit Сmplx; //имя модуля

Interfac e //интерфейсная часть с объявлением типов и процедур

Type complex = record re, im : real; end; //объявления типа

Procedure ADDC (x, у : сomplex; var z: complex ); //объявление процедуры

Procedure SUBC (x, у : сomplex; var z: complex );//объявление процедуры

Implementation //исполнимая часть с текстами процедур

Procedure ADDC; begin z.re: =x.re+y.re; z.im:= x.im+y.im; end;//процедура

Procedure SUBC; begin z.re:= x.rey.re; z.im: =x.imy.im; end;//процедура

End. //окончание модуля

1.3.5. Компилятор

1.3.5.1. Общее описание компилятора


Существуют два компилятора: встроенный в интегрированную среду разработки Delphi и автономный Dcc32.Exe.

Автономный компилятор вызывается из командной строки DOS в виде: Dcc32 [<опции>] <имя файла> [<опции>]. Описание опций можно получить на экране, если в командной строке указать только Dcc. Каждая опция начинается с символа “/”. Если расширение файла не указано, то предполагается расширение .Dpr или .Pas (при отсутствии файла проекта). Если файл является программой, библиотекой, пакетом или модулем, то создается, соответственно, исполняемый файл .Exe, библиотека .Dll, пакет.Bpl, объектный модуль .Dcu.

Управление компилятором осуществляется директивами. Директива заключается в фигурные скобки и начинается с символа “$”. Существует три типа директив: ключевые, параметры и условной компиляции.

Ключевые директивы включают или выключают соответствующие возможности компилятора и имеют две формы записи: сокращенную и длинную. Сокращенная запись директивы состоит из односимвольного имени директивы и знака “+” (включение) или знака ““ (выключение). Длинная запись состоит из имени директивы и слов “On” (включение) или “Off“ (выключение). Пример. {$I+} или {$OICHECKS ON}.

Ключевые директивы могут объединяться в группы через запятые ({SB+,R,S}). Ключевые директивы, расположенные до начала объявления переменный, являются глобальными и действуют на весь процесс компиляции; остальные директивы  локальные.

Директивы параметров определяют значения различных параметров компилятора (например, {$L имя файла}).

Директивы условной компиляции позволяют исключать из компиляции различные фрагменты программы в зависимости от условий.

Настройка умалчиваемых значений ключевых директив осуществляется диалоговой командой Project/Options/Compiler.

1.3.5.2. Основные директивы компилятора


{$A+}, {$Allign On}  выравнивание полей записей на границу слова.

{$B+}, {$Boolean On}  вычисление логических выражений полностью.

{$С+}, {$Assertions On}  проверка условий в процедуре Assert (п. 1.7.9).

{$D+}, {$DebuggInfo On}  генерация отладочной информации.

{$D ‘текст’},{$Description ‘текст’}  заголовок программы DLL.

{$G+}, {$ImprotedData On}  включение в пакет данных.

{$I+}, {$IOChecks On}  включение контроля результатов работы операции файлового вводавывода. При возникновении ошибки генерируется исключение EinOutError (п.1.6.2). Если {I}, исключение не генерируется, а для анализа результата используется функция IOResult (п.1.8.2.1).

{$L файл}, {$Link файл}  использовать компоновщику указанный файл для связывания с программой или модулем.

{$H+}, {$LongStrings On}  использовать строку типа String как длинную.

{$P+}, {$OpenStrings On}  использовать открытые строки.

{$Q+},{$OverFlowChecks On}  проверка переполнения при целочисленных операциях (исключение EIntOverFlow (п.1.7.9)).

{$R+},{$RangeChecks On}  проверка диапазона целочисленных значений, индексов массивов и коротких строк (исключение ERangeError (п.1.7.9)).

{$R файл},{$Resource файл}  указывает имя ресурсного файла.

{$RunOnly On}  компиляция пакета только на этапе выполнения программы.

{$T+},{$Typedaddress On}  контроль за соответствием типов указателей.

{$M+},{$TypeInfo On}  генерация кода контроля типов при выполнении.

{$M n,k}  минимальное (n) и максимальное (k) значения размера стека в байтах для размещения локальных переменных. Если размер мал, то генерируется исключение EstackOverFlow (п.1.6.2) ($M 16384, 1048576).

{$V+},{$VarStringChecks On}  контроль длины строковых параметров.

{$J+},{$WriteAbleConst On}  типизированные константы рассматриваются как переменные с исходными значениями.

1.3.5.3. Директивы условной компиляции


{$Define идентификатор}  определение условного идентификатора.

{$UnDef идентификатор}  отмена ранее определенного, условного идентификатора.

{$IfDef идентификатор} ({$IfNDef идентификатор})  возвращает истину (ложь), если определен указанный условный идентификатор.

{$IfOpt ключевая директива}  возвращает истину, если включена указанная ключевая директива компилятора (например, {IfOpt Q+}).

{$Else}  начало области действия ложности директивы Ifxxxx (IfDef,IfOpt, OfNDef).

{$EndIf}  конец всей области действия условной директивы Ifxxxx.

Условная компиляция производится по схеме:

[{$Define ...}] [{$UnDef ...}] ... {$Ifxxxx} ... [{$Else} ... ] {$EndIf}

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

Пример задания параметра районного коэффициента к зарплате:

{$Define RegionalKoef} //параметр учета районного коэффициента

{$IfDef RegionalKoef} Zarplata:=Zarplata+Zarplata*RegKoef; {$EndIf}

1.3.6. Этапы разработки проекта

1.3.6.1. Разработка интерфейса и программного кода


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

Интерфейс состоит из компонентов (п. 2.1.5), которые выбираются из палитры компонентов (п. 2.1.2) и визуально размещаются на формах проекта (п. 2.1.6).

1.3.6.2. Компиляция


Компиляция проекта выполняется по команде Project/Compile или клавишами ^F9. При компиляции проекта производятся следующие действия: компилируются все устаревшие модули и модули, которые подключают командой Uses устаревшие модули. Устаревшими модулями могут быть исходные (Pas), объектные (Obj) и подключаемые (.Inc) модули. После компиляции формируется исполняемый файл приложения с именем проекта.

1.3.6.3. Cборка


Кроме компиляции можно выполнить сборку проекта командой Project/Build <имя проекта>, при которой компилируются все файлы, а не только устаревшие.

1.3.6.4. Выполнение


Выполнить проект можно из среды Delphi командой Run/Run или клавишей F9; при этом устаревшие файлы будут откомпилированы заново. При таком запуске имеются ограничения: нельзя запустить копию приложения, продолжить разработку приложения можно только после завершения его выполнения. При зацикливании приложения завершение его работы производится командой Run/Program Reset или клавишами ^F2. Для отладки можно использовать средства отладки (п. 1.3.7). Если программа использует параметры, то их нужно задать в поле Run parameters одноименного окна, вызываемого командой Run/Parameters.

Из среды Windows приложение запускается, как и любое другое приложение. Программу можно запустить и из приложения (п. 1.7.8).

1.3.6.5. Выполнение консольного приложения и DOSпрограмм


Консольное приложение имитирует работу в текстовом режиме. Ввод и вывод осуществляются процедурами Read, Readln, Write и Writeln. Достоинством консольного приложения является возможность переноса в Delphi программ, написанных на Паскале в среде Dos, и небольшой объем исполняемых EXEфайлов. Такое приложение создается командой File/ New/Console Wizard либо на основе уже существующего проекта: удалить форму командой Project/Remove From Project, вызвать окно редактора кода командой Project/View Source и произвести необходимые изменения.

Пример:

Program Project1; {$apptype console} //директива компилятора

Uses sysutils, Windows; //подключаемые модули

Begin SetConsoleTitle('Консольное окно'); //заголовок окна приложения

Writeln('Proverka'); Readln; End. //текст программы

Внимание! В консольных приложениях используется кодировка символов, принятая в DOS. Это не позволяет выводить без дополнительной перекодировки текст, набранный в Delphi.

1.3.7. Отладка


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

Сообщения о синтаксических ошибках выводятся в нижней части окна редактора. При двойном щелчке на сообщении об ошибке подсвечивается и становится текущей строка программы c ошибкой.

Для отладки имеется специальный встроенный отладчик, средства которого находятся в меню Run и подменю View/Debug Windows. Настройка отладчика производится командой Tools/Debugger Options.

1.3.7.1. Максимальный контроль ошибок


Максимальный контроль ошибок можно обеспечить настройкой компилятора. Командой Project/Options/Compiler выбрать страницу Compiler, убрать флажок Optimization (оптимизация кода программы), установить флажки: Range checked (контроль выхода индексов за границы массивов), I/O Checking (контроль за вводом/выводом), Overflow Checking (контроль за переполнением при целочисленных операциях), Debug information (добавление отладочной информации), Local symbols (просмотр локальных переменных), Reference info (просмотр структуры кода), Assertions (использование процедуры Assert (п.1.7.9)), Use Debug DCUs (использование отладочных версий стандартных модулей библиотеки компонентов VCL), Show Hints (вывод подсказок), Show warnings (вывод предупреждений при компиляции; очень полезно анализировать эти предупреждения, так как они могут показать скрытые логические ошибки, например, неиспользуемые переменные).

1.3.7.2. Оптимизация кода программы


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

Пример программы до и после оптимизации:

Function Sum:Integer; Var X,Y:Integer;//текст программы до оптимизации

Begin X:=strtoint(edit1.text)+strtoint(edit2.text); Result:=x; y:=2; End;

После оптимизации программа будет эквивалентна программе:

Function Sum:Integer;Begin Result:=strtoint(edit1.text)+strtoint(edit2.text);End;

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

1.3.7.3. Пошаговое выполнение программы


Пошаговое выполнение программы позволяет программисту контролировать результаты работы выполняемой команды. Для этого устанавливается точка прерывания (точка останова, контрольная точка) щелчком мыши по синему круглому маркеру на левом поле окна редактора, и появляется круглый маркер красного цвета  признак установки точки прерывания. После запуска программы ее работа прервется на точке прерывания (визуально слева от строки появится зеленая правая стрелочка). Если навести маркер мыши на имя переменной, то появится в виде всплывающей подсказки ее имя, знак равно и текущее значение, что позволяет оценить правильность этого значения. Для перехода на следующую строку программы нажимается клавиша F8 (кнопка Step Over, или команда Run/Step Over), и все повторяется. Для прекращения работы всей программы выполняется команда Run/Program Reset (сброс программы) или ^F2.

Если в выполняемом шаге используется подпрограмма, то она выполнится за один шаг. Если нужно войти внутрь нее для продолжения выполнения по шагам внутри этой подпрограммы, то следует вместо F8 нажать клавишу F7 или выполнить команду Trace into (войти внутрь). Для быстрого выхода из подпрограммы выполняется команда Run/Run Until Return (выполнять до выхода) или Shift+F8.

Установка точек прерывания по условию производится путем установки курсора на нужную строку и выполнением команды Run/Add Breakpoint/Source Breakpoint. Появится окно Add Source Breakpoint с полями: Condition (условие прерывания программы, например, J>44), Pass count (число проходов перед прерыванием, например: 100  прерывание наступит после выполнения этой строки 100 раз).

Объединение точек прерывания в группы производится путем указания имени группы в поле Group окна Add Source Breakpoint, что позволяет выполнять схожие действия над группой точек прерывания.

Действия контрольной точки задаются в окне Add Source Breakpoint, которое вызывается кнопкой Advanced (дополнительно) из окна Add Source Breakpoint. Окно имеет флажки: Break (прерывание), Ignore/Handle subsequent exceptions (отключение/включение всех последующих исключительных ситуаций), Enable/Disable Group (включение/отключение группы точек).

1.3.7.4. Протокол событий


Ведение протокола событий позволяет сохранить состояние объектов программы в определенных точках прерывания для последующего автономного анализа программистом. Для этого в окне Add Source Breakpoint используются поля: Log message (указывается текст, который выводится в протокол), Eval expression (вводится выражение, значение которого выведется в протокол, если будет установлен флажок Log result). Если флажок Break отключен, то будет только вывод в протокол, а самого прерывания в работе приложения не будет. Протокол можно просмотреть в любое время командой View/Debug Windows/Event Log или клавишами ^Alt+V. Окно протокола можно настроить командой Properties из контекстного меню этого окна. Командой Save Events to File из контекстного меню можно сохранить протокол в текстовом файле.

1.3.7.5. Просмотр и изменение значений


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

Просмотр всех точек прерывания осуществляется командой View/Debug Windows/Breakpoint, появится окно со столбцами: Filename (имя файла), Line (номер строки), Condition (условие выполнения точки), Action (выполняемое действие), Pass count (число проходов), Group (имя группы). Щелчок мышкой возвращает в строку исходного текста с данной точкой. Для изменения описания точки выполняется команда Properties из контекстного меню этого окна.

Если шагов очень много, например, цикл из нескольких тысяч повторений, то использовать клавишу F8 бессмысленно. В этом случае нужно выполнить без промежуточного останова группу операторов. Для этого следует текстовый маркер установить в строку, начиная с которой продолжается пошаговое выполнение, убрать точки прерывания в этой пропускаемой группе, если они есть (щелкнуть мышкой по маркеру точки прерывания), и выполнить команду Run/Run to Cursor (выполнение до курсора) или нажать F4. Продолжить работу программы не по шагам можно командой Run/Run или клавишей F9.

Для возврата в текущую точку прерывания выполняется команда Run/Show Execution Point.

Просмотр стека вызванных подпрограмм и установленных точек прерываний производится командами, соответственно, View/Debug Windows/Call Stack, View/Debug Windows/Breakpoints.

Просмотр значений переменных осуществляется через окно просмотра Watch List в точках прерывания (рис.1.3.7.5).


Рис. 1.3.7.5. Окна свойств слежения и просмотра
Удобно располагать это окно поверх всех окон, для чего нужно выполнить команду Stay on Top из контекстного меню окна.

Список отслеживаемых переменных и выражений формируется в окне Watch Properties (свойства слежения) (рис.3.7.5), которое вызывается командой Run/AddWatch (запуск/добавить слежение) или ^F со следующими основными полями и флажками: Expression (список вводимых отслеживаемых переменных или выражений), Repeat count (число отображаемых элементом массива), Digits (число цифр после точки), Allow Function Calls (допускается использование в выражениях функций), Default (выводимое значение имеет тип переменной), Record/Structure (перед значением выводится имя поля или структуры).

Из окна просмотра Watch List можно выполнять следующие операции: удалить выражение из списка просмотра (клавиша Delete), откорректировать выражение в списке (двойной щелчок по этому выражению и появится окно свойств слежения). В контекстном меню окна просмотра имеются команды: Edit Watch (отредактировать выражения), Add Watch (добавить выражения), Delete Watch (удалить выражения), Disable Watch (отключить выражение), Enable Watch (включить выражение), Delete All Watches (удалить все выражения), Disable All Watches (отключить все выражения), Enable All Watches (включить все выражения).

Для показа всех локальных переменных используется команда View/DebugWindiws/Local Variables.

Просмотр и изменение значений осуществляется через окно Evaluate/Modify (определить/изменить), вызываемое командой Run/ Evaluate/Modify или клавишами ^F7. В поле Expression вводится нужное выражение, после нажатия кнопки Evaluate в поле Result заносится его значение. В поле New value вводится новое значение, которое далее будет использоваться программой, если нажать кнопку Modify. Кнопкой Watch можно добавить в окно слежения выражение из поля Expression.

1.3.7.6. Просмотр программного кода


С помощью команды View/Browse вызывается окно навигатора проекта со страницами Globals (глобальные объекты), Classes (классы), Units (модули). В правой части окна расположен проводник объектов с детальной информацией о текущем объекте в левой части. Проводник объектов имеет страницы Scope (область видимости), Inheritance (наследование), Reference (ссылки: список имен файлов и номеров строк, где описан идентификатор).

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

Для установки закладки для текущей строки следует нажать клавиши ^K, а затем ее номер  цифру от 0 до 9. Для возврата на нужную закладку нажимаются клавиши ^<номер закладки (например, ^2).

Для переключения между описанием программы в интерфейсной части и в разделе реализации используются клавиши ^Shift+PgUp, ^Shift+PgDn.

Существует несколько типов автоподсказок. Настройка их реализуется командой Properties/Code Insight (свойство/анализ кода) из контекстного меню окна редактора программ путем указания флажков: Code completion (автозавершения  после набора имени класса и точки выводится меню методов этого класса для выбора нужного), Code parameters (после ввода имени метода и открывающей круглой скобки выводится тип следующего параметра), Tooltip expression evaluation (вывод во всплывающей подсказке со значением переменной при указании мышкой на ее имени), Tooltip symbol insight (вывод во всплывающей подсказке имени модуля с описанием идентификатора и его типа), Delay (время задержки появления всплывающей подсказки от 0,5 до 1,5 с).

1.3.7.7. Отладка внешних процессов


Отладка внешних процессов, запущенных автономно, осуществляется с помощью команды Run/Attach to Process. Из окна Attach to Process выбирается нужный процесс и нажимается кнопка Attach (присоединить). Присоединяемое приложение должно быть разработано средствами компании Inprise (Borland) и содержать отладочную информацию.

1.3.7.8. Отладка в машинных кодах


После компиляции можно просмотреть и откорректировать полученный компилятором код с целью устранения ошибки или улучшения программы. Окно с машинным кодом выводится командой View/Debug Windows/CPU. Контекстные меню отдельных панелей этого окна (машинный код, дамп памяти, регистры процессора, стек программы, состояние флажкового регистра) содержат команды управления, например: Change (изменить выделенный байт кода), Trace to Next Source Line (выполнить до следующей исходной строки). Для установки точки прерывания на машинные коды используется команда Run/Add Breakpoint/Address Breakpoint. Окно состояния регистров сопроцессора вызывается командой View/Debug Windows/FPU. Команда Run/Add Breakpoint/Data Breakpoint позволяет установить точку прерывания, реагирующую только на попытку изменить содержимое переменной или байта по указанному адресу в поле Address.

1.3.7.9. Инспектор отладки


Инспектор отладки позволяет просматривать и изменять значения переменных, массивов, записей и классов на уровне машинного кода. Окно Инспектора Debug Inspector вызывается командой Run/Inspect. В верхней части окна указывается или выбирается имя объекта, а страницы Data, Methods, Properties содержат информацию об объекте (например, о форме). Для изменения информации об объекте следует выделить нужное поле в окне инспектора и выполнить команду Change из контекстного меню этого окна. Для выделенного поля можно вызвать свой инспектор командой Inspect из контекстного меню. Для вывода новой информации используется команда Descend.

1.3.8. Редактор кода


Основные клавиши редактора.

^<пробел> (вывести меню объектов, свойств и методов), ^<стрелка влево/вправо> (слово влево/вправо), Home/End, ^Home/^End, ^PgDn/^PgUp, ^Q+B/^Q+K (начало/конец строки, файла, экрана, блока), ^Y/Enter (удалить/вставить строку), ^T (стереть слово справа), ^Q+Y (стереть остаток строки справа), ^K+P/^K+W (напечатать/вывести на диск выделенный фрагмент), ^K+R (включить строки из файла), ^K+I/^K+U (сместить фрагмент влево/вправо на один символ), ^Q+n/^K+n (искать/установить маркер n=0..9), ^Q+] (искать парную скобку), ^O+O (перенести директивы компилятора в начало файла).

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


Вопросы для самопроверки

  1. В чем состоит отличие процедуры от функции?

  2. В чем состоит отличие параметрапеременной от выходного параметра?

Контрольные вопросы

  1. Каково отличие параметровпеременных от параметровзначений?

  2. Можно ли изменить значение параметраконстанты в подпрограмме?
1   2   3   4   5   6   7   8   9   ...   27


Учебный материал
© nashaucheba.ru
При копировании укажите ссылку.
обратиться к администрации