Отладка программ в среде Delphi

(для программирующих в Delphi)

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

(1)Точки контрольного останова

Точка контрольного остановаопределяет оператор в программе, перед выполнением которого программа прервет свою работу, и управление будет передано среде Delphi. Точка останова задается с помощью опции View|Debug windows|Breakponts.

Окно точек остановасодержит список всех установленных в проекте точек, перед выполнением которых происходит прекращение работы программы и управление получает среда Delphi.

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

FileName – определяет имя файла;

Line number – номер строки от начала файла (в момент появления окна оно содержит файл и строку с текстовым курсором);

Condition – можно указать условие останова в виде логического выражения (например, MyValue = Мах-Value-12);

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

Окно точек останова (слева) и окно добавления новой точки (справа)

(2)Окно наблюдения

Наблюдать за состоянием переменной или выражения можно с помощью специального окна, вызываемого опцией View|Debug windows|Watches.

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

Для добавления нового выражения следует щелкнуть по окну правой кнопкой мыши и выбрать опцию New Watch. В строке Expression ввести выражение. Окно Repeat count определяет количество показываемых элементов массивов данных; окно Digits указывает количество значащих цифр для отображения вещественных данных; переключатель Enabled разрешает или запрещает вычисление выражения. Остальные элементы определяют вид представления значения.

Значения переменных можно также посмотреть во время останова программы, наведя курсор мыши на переменную в тексте кода.

Окно наблюдения и окно добавления в него нового выражения

(3)Принудительное прерывание работы программы

Если программа запущена из среды Delphi, ее работу можно прервать в любой момент с помощью клавиш Ctrl+F2, кнопки ESC, опцией Run|Program Pause или, наконец, установив точку контрольного останова в той части программы, которая выполняется в данный момент или будет выполнена.

(4)Трассировка программы

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

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

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

Фрагмент окна редактора в режиме отладки

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

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

После трассировки нужного фрагмента программы можно продолжить нормальную ее работу, нажав клавишу F9.

(5)Действия в точках прерывания

В Delphi с любой точкой можно связать одно или несколько действий. Для этого нужно активизировать окно точек останова, вызвать его локальное меню (щелчок правой кнопкой) и выбрать продолжение Properties. В появившемся окне свойств щелкнуть по кнопке Advanced.

В нижней части окна имеется панель Actions, с помощью которой и определяются действия для точки останова, указанной в верхней части окна:

· Break – останов перед выполнением помеченного оператора;

· Ignore subsequent exceptions – если переключатель установлен, игнорируются все возможные последующие исключения в текущем отладочном сеансе до очередной точки останова, в которой, возможно, это действие будет отменено;

· Handle subsequent exceptions – после установки этого переключателя отменяется действие предыдущего переключателя и возобновляется обработка возможных исключений;

· Log message –можно указать произвольное сообщение, связанное с точкой останова;

· Eval expression – можно вычислить некоторое выражение и поместить его результат в это сообщение.

Окно свойств точек останова

(6)Группировка точек прерывания

В Delphi имеется возможность объединения точек останова в группы. Для этого используется все то же окно (рис. 7.4): в строке Group следует указать имя группы, к которой принадлежит точка, а в строках Enable group и Disable group соответственно разрешить или запретить действие всех точек останова, относящихся к соответствующей группе.

(7)Вычисление выражений и изменение значений

С помощью окна Evaluate/Modify опции Run можно узнать значение любого выражения или установить в переменную другое значение. Это окно вызывается в режиме отладки после нажатия Ctrl+F7.

Окно просмотра изменения значений

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

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

(8)Ведение протокола работы программы

В ряде случаев бывает неудобно или невозможно пользоваться пошаговой отладкой программ. В таких ситуациях могут помочь контрольные точки, которые не прерывают работу программы, а лишь помещают некоторую информацию в специальный файл трассировки. Для реализации такой точки следует раскрыть окно Run|Add Breakpoint|Source Breakpoint (рис. 7.1), убрать флажок в переключателе Break и написать сообщение в строке Log message. Можно также в строке Eval expression указать выражение, которое будет вычислено и вместе с сообщением помещено в протокол работы программы. Этот протокол можно просмотреть в любой момент (в том числе и после завершения прогона программы) с помощью опции View|Debug Windows|Event Log.

 

Глава 2. Лекция 6