Найважливішою перевагою динамічного створення компонента є можливість його налагодження з використанням засобів відладчика середовища Delphi. У цьому розділі коротко описані основні прийоми роботи з відладчиком.
Для роботи з вбудованим отладчиком програма повинна компілюватися з встановленими прапорцями в групі Debugging на вкладці Compiler вікна, що відкривається командою Project ► Options.
Для установки безумовної точки зупину помістіть в потрібний рядок текстовий курсор і натисніть клавішу F5 - рядок виділиться кольором (за замовчуванням - червоним). Повторне натискання клавіші F5 видаляє точку зупину. Створити-видалити точку зупинки можна також натисканням миші на службовому полі зліва від рядка. Створена таким способом точка зупинки перериває виконання програми і передає управління середовищі Delphi перед тим, як буде виконаний розташований в рядку оператор програми.
Точку зупину можна зробити умовною. Для цього використовується вікно, яке викликається командою View ► Debug Windows ► Breakpoints або комбінацією клавіш Ctrl + Alt + B. У цьому вікні перераховані всі створені в програмі точки зупину. Виділіть ту з них, яка повинна стати умовної, і натисніть клавішу Enter - з'явиться вікно, показане на рис. 10.3.
Мал. 10.3. Вікно управління властивостями точки зупину
В поле Condition вікна введіть умовний вираз з програмними змінними і (або) властивостями компонента, наприклад:
(Progress> 45) and (Progress <55) Точка останова прервет выполнение программы только при истинности условного выражения. В поле Pass count окна можно указать количество проходов точки останова до момента ее срабатывания.
В останніх версіях Delphi точки зупину можна об'єднувати в групи. Для цього потрібно в поле Group ввести ідентифікатор групи, а в полях Enable group і Disable group - ідентифікатори відповідно дозволених і заборонених груп.
У деяких фрагментах програми точки зупину встановлювати не можна. Це стосується тих фрагментів, які пов'язані з отрисовкой компонента: перервана отрисовка відновиться заново після виходу з точки зупинки, яка спрацює повторно, і так до тих пір, поки не буде знята. У цих ситуаціях можна використовувати поля Log message і Eval expression; помістіть в перший довільну текстову рядок, у другу - довільне вираження і скиньте прапорець Break. Точка не перерве виконання програми, а помістить ваше повідомлення і значення обчисленого виразу в спеціальний журнал налагодження, який після прогону програми ви зможете подивитися за допомогою команди View ► Debug Windows ► Event Log або комбінації клавіш Ctrl + Alt + V.
Трасування програми означає покрокове виконання операторів початкового тексту програми після спрацьовування точки зупину. Для трасування використовуються клавіші F7 і F8. Натискання клавіші F7 призводить до виконання операторів поточного рядка тексту програми. Якщо в рядку є оператори виклику підпрограм, поточним рядком стає перший рядок першої підпрограми, що викликається, в іншому випадку - наступний рядок коду. При натисканні клавіші F8 відбувається те ж саме, але робота підпрограм не простежується.
Не розміщуйте в одному рядку коду кілька операторів - це утруднить трасування програми.
Отримання значень змінних і виразів
Після спрацьовування точки зупину і (або) в ході трасування програми можна подивитися значення змінних або виразів з ними. Для цього при роботі з останніми версіями Delphi просто підведіть покажчик миші до ідентифікатора змінної в коді програми - значення змінної з'явиться у вікні оперативної підказки.
СОВЕТЧтоби вікно коду при трасуванні не закривати собою вікно Watch List, «прічальте» останнім до нижнього краю вікна коду. Врахуйте, що причалювання буде успішним тільки в тому випадку, якщо вікно коду не розгорнуті на весь екран.
У модуль System останніх версій Delphi (починаючи з версії 3) включена отладочная процедура Assert, що має такий прототип:
Вона отримує в якості параметра деякий логічне вираження ехрг і, можливо, текстовий рядок msg. Процедура обчислює вираз і, якщо його значення дорівнює False, збуджує виключення EAssertionFailed. У створюваному при цьому вікні буде показано повідомлення msg, а якщо воно опущено - стандартне повідомлення. Крім того, відображається повний маршрут доступу до файлу з вихідним текстом і номер рядка, в якій порушено виняток.
Ця процедура є зручним налагоджувальний інструментом, так як її виконання можна заборонити або дозволити за допомогою глобальної директиви компілятора. Той же ефект дає установка-скидання прапорця Assertions на вкладці Compiler вікна, що відкривається командою Project ► Options.