Создание и отладка программ

Создание и отладка программы на Ассемблере

Создание и отладка программы на Ассемблере

Цель работы:

– ознакомление со структурой программы на языке Ассемблер;

– приобретение навыков работы со средствами разработки программ на Ассемблере для IBM-совместимых ЭВМ

– изучение основных команд процессора i8086 (пересылки данных, арифметики) и директив определения данных языка Ассемблер;

Основные положения

!!!Предварительно следует ознакомиться со структурой процессора и сегментной организацией памяти ОС MS-DOS (файлы Ассемблер.doc или asm_lab.doc).

Инструментальные средства разработки программы на Ассемблере

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

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

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

Рис.1.1 Процесс разработки ПО на Ассемблере

С помощью редактора текста (Microsoft Word, NotePad или др.) создается исходный модуль программы – текстовый файл в коде ASCII, содержащий текст программы на исходном языке. Этому файлу присваивается расширение .asmдля Ассемблера.

Транслятор переводит программу с языка программирования на язык машинных кодов и производит несколько модулей, в том числе объектный модуль с расширением .obj и текстовый файл, содержащий как программу на исходном языке, так и программу в кодах ЭВМ для просмотра (файл с расширением .lst). Транслятор с языка Ассемблер называется ассемблером.

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

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

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

Существует несколько вариантов СП для Ассемблера. Наиболее популярны из них система фирмы Microsoft (ассемблер MASM, редактор связей LINK, отладчик SYMDEB [ ] ) и Turbo-система фирмы Borland (ассемблер TASM, редактор связей TLINK и мощный отладчик TD [ ]).

Каждая программа должна быть обязательно оформлена в соответствии с требованиями выбранного ассемблера.

Mov DS,AX

… ; Текст программы.

mov AH,4Ch ; Выход из программы

int 21h; в DOS.

myproc endp;

cseg ends; Конец сегмента программы.

Stacksegment stack ‘stack’; Организация

dw 128 dup (0); сегмента

stack ends; стека.

end myproc ; Конец программы

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

Источник: https://cyberpedia.su/12xcacd.html

Создание и отладка программ на языке инструкций

11061

Создание и отладка программ на языке инструкций

Практическая работа

Информатика, кибернетика и программирование

Создание и отладка программ на языке инструкций: Методические указания для выполнения практической работы по дисциплине Интегрированные системы проектирования и управления / Воронеж. гос. технол. акад.; Сост. И.А. Хаустов. Воронеж 2011. 13 с. Указания разработаны в соотве…

Русский

2013-04-03

270 KB

14 чел.

Создание и отладка программ на языке инструкций: Методические указания для выполнения практической работы по дисциплине «Интегрированные системы проектирования и управления» / Воронеж. гос. технол. акад.; Сост. И.А. Хаустов. Воронеж, 2011.  13 с.

Указания разработаны в соответствии с требованиями ООП подготовки бакалавров по   направлениям 220700 – «Автоматизация технологических процессов и производств» и 220400 – «Управление в технических системах».Методические указания посвящены обучению  навыкам создания, подключения и отладке управляющих программ в среде SCADA TRACE MODE на языке инструкций, поддерживающего стандарт МЭК 1131.

Ил. . Библиогр.:  назв.

Составитель доцент И.А. ХАУСТОВ

Научный редактор  профессор, д.т.н. В.Ф. ЛЕБЕДЕВ

Рецензент профессор, д.т.н. Ю.А. ЧЕВЫЧЕЛОВ

Печатается по решению

редакционно-издательского совета

Воронежской государственной технологической академии

  Хаустов И.А.,  2009

 Воронеж. гос. технол. акад., 2009

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

Цель работы

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

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

. К основным понятиям языка Техно IL относятся:

 Переменные;

Константы;

Операнды;

Операции;

Функции;

Метки;

Операторы;

Источник: http://5fan.ru/wievjob.php?id=11061

Трансляция программы, создание загрузочного модуля, отладка программы

Сохрани ссылку в одной из сетей:

Лабораторная работа № 1

Трансляция, компоновка и отладка программ

1 ЦЕЛЬ РАБОТЫ

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

2 ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

2.1 Последовательность формирования исполняемого файла

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

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

Ассемблирова-ние (MASM)

Компоновка (LINK)

Отладка (TD, DEBUG)

Ввод текста

Рис. 1. Процесс подготовки исполняемого файла

В процессе формирования программы на языке ассемблера выделено 4 этапа:

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

Начальной процедурой создания программы на языке Ассемблера является ввод исходного текста программы в файл с расширением .asm.

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

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

Следующим шагом формирования программы является компиляция, которая носит специфическое название ассемблирование. Этот этап может быть выполнен программами ASM, MASM или TASM (сложность программ-компиляторов растет в указанной последовательности).

Результатом выполнения этого этапа является программа в машинных кодах с расширением .obj, или, иначе, объектная программа, уже “понятная” микропроцессору. Естественно перевод состоится лишь в том случае, если исходный текст программы не содержит ошибок.

Одновременно с объектным файлом могут быть созданы файлы листинга (*.lst ) и перекрестных ссылок (*.crf).

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

Файл листинга содержит код ассемблера исходной программы, машинный (объектный) код каждой команды и ее смещение в кодовом сегменте (значение регистра IP).

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

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

Однако объектная программа еще не является законченной и исполняемой, т.к.

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

Преобразование объектной программы в исполняемую (компоновка) выполняется загрузчиком (редактором связей) LINK либо TLINK (в зависимости от используемой программы ассемблирования: для ASM, MASM – LINK, для TASM – TLINK).

Чтобы проверить работоспособность созданной программы и увидеть результаты ее работы (если не использован вывод на дисплей), применяют программу отладчик. Тестирование и отладка исполняемой программы выполняется отладчиком TD или DEBUG.

Отладчикtd.exe, разработанный фирмой Borland International представляет собой оконную среду отладки программ на уровне исходного текста на языках Pascal, C, ассемблер. Основные возможности отладчика, наиболее широко используемые студентами – это:

  • выполнение трассировки программы в прямом направлении, при котором за 1 шаг выполняется одна машинная инструкция;
  • просмотр и изменения состояния аппаратных ресурсов микропроцессора во время командного выполнения программы.

Управлять работой отладчика можно с помощью системы меню двух типов:

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

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

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

Однако для детального изучения работы программы рекомендуется применять режим выполнения программы по шагам, для вызова которых выбираются пункты меню Run -> Traceinto (прерывание или внутренняя процедура будут выполняться по шагам) или Run -> Stepover(вызов процедуры или прерывание отрабатываются как одна обычная команда). При этом используется окно CPU, вызов которого осуществляется через глобальное меню командой View -> CPU. Окно CPUсостоит из 5 подчиненных окон:

– окно с исходной программой в машинных кодах,

– окно регистров микропроцессора, отражающее текущее состояние регистров,

– окно флагов, отражающее состояние флагов микропроцессора;

– окно стека, в котором отражается содержимое области памяти, отведенной для стека,

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

Рекомендуемый порядок работы с отладчиком:

а) вызвать на выполнение td.exe.;

б) выбрать файл исполняемой программы, набрав комбинации клавиш FILE ->OPEN и имя Вашей программы в окне запроса.

После ответа OK на сообщение об отсутствии символьной таблицы в окно CPUзагружается программа с нулевого адреса относительно начала сегментного регистра кодов (для приведенного в конце описания лабораторной работы примера это будет команда PUSH DS);

в) выбрать режим пошагового выполнения Run -> Stepover. В окне CPUпоявляется окрашенный треугольник между относительным адресом команды и машинным кодом команды.

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

Пошаговый процесс выполнять до тех пор, пока не появится сообщение об окончании программы (с ключевым словом terminated);

г) после выполнения команд, связанных с изменением содержимого ячеек памяти, нужно просматривать эти изменения командой VIEW -> DUMP.При отсутствии мыши скрыть окно дампа памяти можно нажатием функциональной клавиши F6.

2.2. Пример программы на Ассемблере

; lab1.asm – упрощенная версия учебной программы

; по дисц. “Программирование”

; *****************************************************************

; Назначение: Программа формирует и выводит на экран приветствие

; пользователя с помощью функции ДОС “Вывод строки”

; (номер 09 прерывание 21h), которая:

; – обеспечивает вывод на экран строки символов,

; заканчивающейся знаком “$”;

; – требует задания в регистре ah номера функции=09h,

; а в регистре dx – смещения адреса выводимой строки;

; – использует регистр ax и не сохраняет его содержимое.

; ******************************************************************

.MODEL SMALL ; Модель памяти-SMALL(Малая)

.STACK 100h ; Отвести под Стек 256 байт

.DATA ; Начало сегмента данных

Grt DB 'Вас приветствует ст.гр.8811 – Иванов И.И.',13,10,'$'

; Текст приветствия

.CODE ; Начало сегмента кода

Main: mov ax,@data ; Загрузка в DS адреса начала

mov ds,ax ; сегмента данных

mov dx,OFFSET Grt ; Загрузка в dx смещения

; адреса текста приветствия

DisplayGreeting:

mov ah,9 ; # функции ДОС печати строки

int 21h ; вывод на экран приветствия

mov ah,4ch ; # функции ДОС завершения программы

int 21h ; завершение программы и выход в ДОС

END main

3. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

  1. Загрузить файл lab1.asm, просмотреть программу и разобраться в структуре и реализации сегментов.

  2. Строку-приветствие преобразовать в соответствии со своими личными данными.

  3. Протранслировать программу с помощью команды

> tasm имя_файла.asm

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

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

4. Скомпоновать загрузочный модуль с помощью строки

> tlink имя_файла.obj

5. Выполнить программу в автоматическом режиме путем набора строки

> имя_файла.exe

и убедиться в ее работоспособности.

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

7. Выполнить программу My_program в пошаговом режиме под управлением отладчика:

> td имя_файла.exe

с фиксацией содержимого используемых регистров и ячеек памяти до и после выполнения команды. Записать содержимое всех регистров процессора перед выполнением 1-ой команды.

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

Источник: https://gigabaza.ru/doc/95249.html

Создание компиляция и отладка простого приложения

Кафедра: автоматика и инф. технологии

Лабораторная работа

На тему:

“Создание, компиляция и отладка простого приложения”

Екатеринбург, 2008

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

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

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

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

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

Структура файла главной (головной) программы приложения Delphi.

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

Головной файл приложения Delphi имеет следующую структуру:

Program < имя >;

{ объявление подключаемых модулей, а также локальных типов, классов, констант, переменных, описание локальных функций и переменных }

Begin

{ операторы тела программы }

End.

Типичная головная программа приложения имеет следующий вид:

Program Project 1;

Uses

Forms,

Unit 1 in ‘Unit 1. pas’ {Form 1}, Unit 2 in ‘Unit 2. pas’ {Form 2 };

{$R *. res }

{ можно поместить описание констант, переменных, функций, процедур, доступных для использования только в пределах данного файла }

Begin

Application. Initialize;

Application. CreateForm (TForm 1, Form 1);

Application. CreateForm (TForm 2, Form 2);

Application.run;

End.

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

2) После заголовка в тексте программы располагается предложение:

Uses

Forms,

Unit 1 in Unit 1. pas’ {Form 1}, Unit 2 in Unit 2. pas’ {Form 2 };

В этом предложении перечисляются модули, загружаемые программой. Первый модуль Forms является системным, а следующие – модулями разработанными самостоятельно форм. Данный пример подразумевает, что в проекте были созданы две формы с именами Form1, Form2 в модулях Unit1, Unit2. Заключенные в фигурные скобки название форм представляют собой комментарии.

3) Следующая строка текста – {$R *. res } – представляет собой директиву компилятора, связанную с использованием файлов ресурсов. Указанный файл должен быть файлом ресурсов Windows. По умолчанию используется расширение. RES для файлов ресурсов.

4) Первый оператор в теле программы Application. Initialize; – инициализирует приложение, следующий за ним оператор Application. CreateForm (TForm 1, Form 1); и Application. CreateForm (TForm 2, Form 2); – создают объекты формы1 и формы2, последний оператор Application.run; – начинает выполнение приложения.

Общая структура файла модуля:

Unit < имя модуля >;

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

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

Initialization // (Необязательный раздел – операторы выполняются один раз при первом обращении к модулю)

Finalization // (Необязательный раздел – операторы выполняются при любом завершении работы модуля)

End.

Рассмотрим теперь текст модуля с пустой формой:

UnitUnit1;

Interface // Открытый интерфейс модуля

Uses{ Список подключаемых модулей }

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

Type{ Объявление класса формы }

TForm1 = class (TForm)

Private // закрытый раздел класса

Public // открытый раздел класса

End;

Var

Form 1: TForm1;

Implementation // Реализация модуля

{$R *. dfm }

End.

1) Модуль начинается с ключевого слова UNIT, после которого указывается имя модуля. Оно совпадает с именем файла, в котором был сохранен модуль. Текс модуля состоит из двух основных разделов: открытый интерфейс модуля и реализация модуля. Внешние модули не могут видеть типы, переменные, константы, функции и процедуры, размещенные в разделе реализации.

2) После предложения USES, содержащего список подключаемых модулей, располагается заготовка объявления класса формы. Имя класса формы – TForml. Класс содержит два раздела: открытый раздел класса (PUBLIC) – то, что объявлено в этом разделе доступно для других классов и модулей, закрытый раздел класса (PRIVATE) – то, что объявлено в этом разделе доступно в пределах данного модуля.

3) За объявлением класса формы следуют строки:

Var

Form 1: TForm1;

Таким образом, объявляется переменная Form1 класса TForm1.

4) Затем следует пустой раздел реализации INPLEMENTATION, в котором содержится только директива компилятора {$R *. dfm }, обеспечивающая компоновку файлов ресурсов форм.

Задание 1. Создать приложение, которое обеспечивает ввод двух целых чисел, по щелчку на кнопке с символом “=” вычисляет их сумму и выводит значение результата.

Решение:

После запуска Delphi создайте новый проект при помощи команды File>New>Application (Файл>Создать>Приложение). В результате создания проекта приложения в окне будет раскрыто окно формы, на которой можно размещать визуальные компоненты проекта.

Далее выполните следующее:

Сохраните новый проект File>Save Project As (Файл>Сохранить проект как).

В окне Save Unit1 As (Сохранить Unit1 как) откройте диск S и создайте новую папку для файлов создаваемого проекта и назовите ее “Сумма двух целых чисел”.

Затем в этом же окне откройте созданную папку и нажмите кнопку СОХРАНИТЬ.

После сохранения файла модуля Unit1. pas откроется окно Save Project As (Сохранить проект как). Задайте имя проекта “SUMMA” и нажмите кнопку СОХРАНИТЬ.

Изменим свойства формы:

Для изменения размеров формы достаточно захватить угол окна формы и, не отпуская левую кнопку мыши, перетащить мышь, задавая требуемый размер формы (или указать в свойствах размеры: ClientHeight – 489, ClientWidth – 730).

Измените надпись в заголовке формы с помощью Инспектора объектов. Для этого выберите свойство Caption (Заголовок) и задайте новое значение – “Сумма двух целых чисел”.

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

Размещение на форме компонентов Edit1, Edit2, Edit3, Label1, Button1. Для размещения компонентов на форме выполните следующее:

Откройте палитру компонентов Standard.

Затем щелкните на значке соответствующего компонента и перетащите его на форму.

Задайте положение и размер компонента при помощи мыши, как показано на рисунке (рис.1):

L

B

Рис.1 Пример формы с компонентами

Изменим свойства компонентов на форме:

Выберите компонент Label1 и задайте свойство Caption компонента Label1 – “плюс”.

Измените цвет, стиль и высоту шрифта компонента Label1. Для этого выберите свойство Font и щелкните на рядом расположенном знаке плюс. Откроется таблица свойств. Введите следующие значения: Color – clPurple, Size – 20.

Аналогичным образом задайте свойство Caption компонента Button1 – “равно” и размер и цвет символов.

Удалите текст Edit1, Edit2, Edit3 в соответствующих компонентах. Для этого выберите свойство Text и удалите текст.

Добавьте на форму три объекта Label, расположите их над объектами Edit и задайте их свойствам Caption значения “Слагаемое”, “Слагаемое” и “Сумма” соответственно.

Измените цвет, стиль и высоту шрифта добавленных компонентов используя свойство Font и Style.

Сохраните изменения, внесенные в проект, нажатием кнопки Save All (сохранить все) в стандартной панели инструментов.

Для просмотра содержимого проекта Delphi откройте окно Проводника и просмотрите папку проекта. Проект состоит из форм, модулей, установок параметров проекта, ресурсов и т.д. Вся эта информация размещается в файлах. Многие из этих файлов автоматически создаются Delphi, когда строится приложение. Главной частью приложения является файл summa.

dpr – файл проекта, содержащий код на языке Object Pascal, с которого начинается выполнение программы и который обеспечивает инициализацию других модулей. Он создается и модифицируется Delphi автоматически в процессе разработки приложения. Имя, присваиваемое файлу проекта при его сохранении, становится именем исполняемого файла (в нашем примере – summa. exe).

Другие файлы проекта:

Unit1. pas – файл модуля;

Unit1. dfm – файл формы;

Summa. dof – файл параметров проекта;

Summa. res – файл ресурсов;

Unit1. ~dfm, Unit1. ~pas – файлы резервных копий.

После просмотра списка файлов проекта закройте окно Проводника и активизируйте окно Delphi.

Запустите программу на выполнение при помощи команды RunRun или нажатием кнопки Run на панели инструментов или клавиши F9.

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

Завершите работу приложения нажатием клавиш Alt + F4.

Создание кода – обработчика события.

Для того чтобы приложение выполняло вычисление при щелчке на кнопке Button1 с изображением символа “равно”, следует написать код обработки этого события. Для создания кода обработки события следует воспользоваться страницей EVENTS (Событие) в окне Инспектора объектов.

Активизируйте объект Button1 и выберите на странице Событий событие OnClick (это событие нажатия левой кнопки мыши по данному объекту).

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

Procedure TForm1. Button1Click (Sender: TObject);

В разделе implementation располагается текст заготовки этой процедуры:

Procedure TForm1. Button1Click (Sender: TObject);

Begin

End;

Курсор будет находиться в пустой строке между ключевыми словами beginи end. Этот код является заготовкой для обработчика события, которую автоматически создала интегрированная среда Delphi.

Так как в задаче требуется выполнить сложение двух целых чисел, а результат их сложения также является целым числом, то в разделе описания переменных следует ввести следующее описание: vara, b, c: integer; – два слагаемых и сумма.

Так как в приложении для ввода чисел-слагаемых используются окна редактирования Edit1, Edit2, то необходимо при помощи процедуры StrToInt преобразовать строки в целые числа. Для вывода результата суммирования в окне редактирования Edit3 нужно преобразовать число в строку функцией IntToStr. Поэтому в основном теле процедуры обработки события следует ввести следующий текст:

a: = StrToInt (Edit1. text);

b: = StrToInt (Edit2. text);

c: = a + b;

Edit3. text: = IntToStr (c);

Целиком процедура обработки события щелчка на кнопке Button1 будет выглядеть следующим образом:

Procedure TForm1. Button1Click (Sender: TObject);

var a, b, c: integer;

Begin

a: = StrToInt (Edit1. text); {преобразование текстовой строки в целое число}

b: = StrToInt (Edit2. text);

c: = a + b;

Edit3. text: = IntToStr (c); {преобразование целого числа в текстовую строку}

End;

Запустите приложение на выполнение. Введите два слагаемых и, нажав кнопку с надписью “равно”, запустите процедуру обработки события – вычисление суммы двух целых чисел.

Сохраните все изменения внесенные в проект и закройте его.

Источник: https://doc4web.ru/informatika/sozdanie-kompilyaciya-i-otladka-prostogo-prilozheniya.html

Лекция “Отладка программ”

Главная » Статьи » Лекции » ТРПП

Лекция “Отладка программ”

Понятия «отладка», «отладка программы». Процесс отладки. Виды (методика) отладок, приемы отладки.

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

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

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

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

    При прерывании работы приложения строка будет отмечена желтым цветом, если диалоговое окно будет закрыто при нажатии кнопки Debug – Отладка. Если сообщение об ошибке было закрыто кнопкой End – Закончить, то будет отмечен заголовок процедуры, в которой найдена ошибка.

Отладка программы

Отладка, как мы уже говорили, бывает двух видов:

·        Синтаксическая отладка. Синтаксические ошибки выявляет компилятор, поэтому исправлять их достаточно легко.

·        Семантическая (смысловая) отладка. Ее время наступает тогда, когда синтаксических ошибок не осталось, но результаты программа выдает неверные. Здесь компилятор сам ничего выявить не сможет, хотя в среде программирования обычно существуют вспомогательные средства отладки, о которых мы еще поговорим.

Отладка – это процесс локализации и исправления ошибок в программе.

Принципы отладки

Принципы локализации ошибок:

·        Большинство ошибок обнаруживается вообще без запуска программы – просто внимательным просматриванием текста.

·        Если отладка зашла в тупик и обнаружить ошибку не удается, лучше отложить программу. Когда глаз “замылен”, эффективность работы упорно стремится к нулю.

·        Чрезвычайно удобные вспомогательные средства – это отладочные механизмы среды разработки: трассировка, промежуточный контроль значений. Можно использовать даже дамп памяти, но такие радикальные действия нужны крайне редко.

·        Экспериментирования типа “а что будет, если изменить плюс на минус” – нужно избегать всеми силами. Обычно это не дает результатов, а только больше запутывает процесс отладки, да еще и добавляет новые ошибки.

Принципы исправления ошибок еще больше похожи на законы Мерфи:

·        Там, где найдена одна ошибка, возможно, есть и другие.

·        Вероятность, что ошибка найдена правильно, никогда не равна ста процентам.

·        Наша задача – найти саму ошибку, а не ее симптом.

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

·        Исправляя одну ошибку, очень легко внести в программу еще парочку. “Наведенные” ошибки – настоящий бич отладки.

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

Методы отладки.

1.     Силовые методы

Источник: http://prepod-shmu.ucoz.ru/publ/lekcii/trpp/lekcija_quot_otladka_programm_quot/14-1-0-19

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}