Пример Редактора Компонент

В качестве примера создадим Редактор Компонент для класса TButton. Этот Редактор будет показывать сообщение и изменять свойство Caption у объекта TButton. В данном примере это будет срабатывать и при двойном щелчке мыши, и через контекстное меню.

Объявление нового класса Редактора Компонент:

TButtonEditor = class(TComponentEditor)

private

procedure HiThere;

public

procedure Edit; override;

procedure ExecuteVerb(Index: Integer); override;

function GetVerb(Index: Integer): string; override;

function GetVerbCount: Integer; override;

end;

Процедура HiThere будет показывать сообщение и изменять свойство Caption:

procedure TButtonEditor.HiThere;

begin

MessageDlg('Hi! It replaces Default Component Editor.',

mtInformation, [mbOK], 0);

(Component as TButton).Caption:='Hi!';

Designer.Modified;

end;

Процедуры Edit и ExecuteVerb только вызывают HiThere:

procedure TButtonEditor.Edit;

begin

HiThere;

end;

procedure TButtonEditor.ExecuteVerb(Index: Integer);

begin

if Index = 0 then HiThere;

end;

Процедуры GetVerb и GetVerbCount определяют вид контекстного меню:

function TButtonEditor.GetVerb(Index: Integer): string;

begin

result:='&Get message...'

end;

function TButtonEditor.GetVerbCount: Integer;

begin

result:=1;

end;

Здесь в контекстное меню добавляется один пункт "Get message:".

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

procedure Register;

begin

RegisterComponentEditor(TButton, TButtonEditor);

end;

После подключения нового Редактора Компонент в среду Delphi (пункт меню Component/Install Component), создайте новый проект, положите на форму объект TButton и щелкните дважды на нем - появится диалог:

После того, как Вы нажмете "OK", текст на кнопке изменится.

Созданный Редактор Компонент заместит Редактор по умолчанию для всех объектов класса TButton и его наследников, например, TBitBtn.

Лекция 17

ТЕМА: Отладка программ. Инструменты. Методика отладки.

Литература: 1. Культин Н. Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург, 2010.

2. https://www.helloworld.ru/texts/comp/lang/delphi/delphi4/DebugerDelphi.htm

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

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

Программные ошибки, как правило, делятся на три вида:

1. Синтаксическая ошибка. Неправильное употребление синтаксических конструкций, например употребление оператора цикла For без Tо.

2. Ошибка времени выполнения.

3. Алгоритмическая ошибка. Нарушение логики программы, приводящее к неверному результату. Это наиболее трудный для "отлова" тип ошибки. Такие ошибки, как правило, кроются в алгоритмах и требуют тщательного анализа и всестороннего тестирования.

Синтаксические ошибки, их также называют ошибками времени компиляции (Compile-time error), наиболее легко устранимы. Их обнаруживает компилятор, а программисту остается только внести изменения в текст программы и выполнить повторную компиляцию.

Ошибки времени выполнения, в Delphi они называются исключениями (exception), тоже, как правило, легко устранимы. Они обычно проявляются уже при первых запусках программы и во время тестирования. При возникновении ошибки в программе, запущенной из Delphi, среда разработки прерывает работу программы, о чем свидетельствует заключенное в скобки слово Stopped в заголовке главного окна Delphi, и на экране появляется диалоговое окно, которое содержит сообщение об ошибке и информацию о типе (классе) ошибки. Помимо этого, IDE размещает окно редактора поверх остальных и выделяет строку, вызвавшую исключительную ситуацию. На рис. 1 приведен пример сообщения об ошибке, возникающей при попытке деления на ноль.

Рис. 1. Сообщение об ошибке при запуске программы из Delphi.

После возникновения ошибки программист может либо прервать выполнение программы (для этого надо из меню Run выбрать команду Program Reset), либо продолжить ее выполнение, например, по шагам (для этого из меню Run надо выбрать команду Step), наблюдая результат выполнения каждой инструкции.

Если программа запушена из Windows, то при возникновении ошибки на экране также появляется сообщение об ошибке, но тип ошибки (исключения) в сообщении не указывается (рис. 2). После щелчка на кнопке ОК программа, в которой проявилась ошибка, продолжает (если сможет) работу.

 
 

Рис. 2. Сообщение об ошибке при запуске программы из Windows.

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

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

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

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

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

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

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

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

Нынешние среды разработки часто предлагают нам реагировать на возникающую проблему в диалоговом режиме. При этом можно:

· просмотреть текущие значения переменных, состояние памяти, участок алгоритма, где произошел сбой;

· прервать выполнение программы;

· внести в программу изменения и повторно запустить ее (в компиляторных средах для этого потребуется перекомпилировать код, в интерпретаторных выполнение можно продолжить прямо с измененного оператора).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: