До пошуку помилок у програмних модулях та

для налагодження прикладної програми С++

Компіляція файлів програми С++ може виконуватися у С++ Builder декількома способами.

Варіант перший. Компіляція файлу програми з наступним її виконанням здійснюється командою Run/Run або відповідною швидкою кнопкою на панелі інструментів, чи "гарячою" клавішею F9. У цьому випадку виконується компіляція програми С++, її компонування, з створенням виконавчого файлу (.exe), і він запускається на виконання. Створення та виконання файлу (.exe) буде проводитись тільки у випадку, якщо при компіляції і компонуванні не виявлені помилки. При компіляції і компонуванні на екрані активізується вікно з стану процесу компіляції. Верхній рядок вікна показує ім'я компілюємого проекту файлів. У наступному рядку відображається поточна обробка: компіляція визначеного модуля компонування (Lіnkіng). У рядку нижче відображається поточний рядок модуля (Current lіne), оброблюваний компілятором, і загальне число рядків у модулі (Total lіnes). У самому нижньому рядку відображається число зауважень (Hіnts) виявлених на даний момент, попереджень (Warnіngs) і помилок (Errors). Клавіша Cancel унизу вікна дозволяє перервати процес компіляції і компонування прикладної програми. Якщо у компилюємому файлі зустрілися непоправні помилки, виконавчий файл не буде створений. Якщо помилок немає, файл (.exe) створюється, але і в цьому випадку у компілятора можуть бути попередження і зауваження, які необхідно уважно вивчати. При компіляції проекту файлів, що складається з декількох програмних модулів, компілюю- ться тільки ті модулі, тексти яких були змінені з моменту попереднього компонування проекту. Це істотно заощаджує час компіляції великіх

прикладних програм [1].

Варіант другій. При виконанні команди Run можна задати командний рядок, якщо у програмі передбачена передача якихось параметрів. Для цього треба виконати команду Run/Parameters і у вікні, що відкриється, написати необхідний командний рядок.

Не завжди треба компілювати проект і відразу виконувати. Часто важливіше просто перевірити, чи не містять останні зміни коду якихось помилок. У цьому випадку не треба гаяти час на виконання проекту і краще скористатися іншими командами меню: Project/Compіle Unіt, Project/Make Project або Project/Buіld Project.

Варіант третій. Команда Compіle виконує компіляцію тільки того програмного модуля, який виділений у вікні “Редактор коду” або визначений у вікні “Менеджер проектів”. Ця команда дозволяє найбільш швидко перевірити наявність помилок і зауважень при компіляції програмного модуля, тому що не здійснюється компонування програми і не компілюються ніякі інші модулі. Якщо компіляція пройшла успішно, створюється об'єктний файл (.obj) відкомпільованого програмного модуля.

Варіант четвертий. Команда Make виконує компіляцію усіх тих модулів, тексти яких були змінені з моменту попереднього компонування проекту файлів. Якщо компіляція пройшла успішно, то створюються об'єктні файли модулів (.obj) і здійснюється компонування програми. Якщо і вона пройшла, то створюється виконавчий файл (.exe). У такий спосіб відмінність команди Make від Run тільки в тім, що після компонування частин програми С++ вона не виконується.

Команда Buіld подібна команді Make за одним виключенням – усі програмні модулі компілюються, незалежно від того, коли вони востаннє змінювалися. Виконання цієї команди вимагає найбільшого часу на компіляцію прикладної програми.

Крім описаних команд компіляції мається ще дві: Project/Make All Projects та Project/Buіld ALL Projects. Вони подібні розглянутим командам Make та Buіld, але використовуються при роботі з групою проектів і відносяться не до одного, а до всіх проектів групи.

Якщо в процесі компіляції виявлена помилка, то це активізує додаткове вікно з повідомленнями про знайдені помилки при компіляції. Звичайне вікно з повідомленнями відкривається в нижній частині вікна редактора коду. Вікно повідомлень є вікном, що вбудовується, і його можна витягнути з вікна редактора коду і зробити самостійним вікном або вмонтувати, наприклад, у вікно “Інспектор об'єкта”. Найбільш зручно вбудовувати вікно з повідомленнями про помилки компіляції у вікно “Редактор коду”. Якщо вікно "повідомлень з помилок" при маніпуляціях вбудовування було загублено, тоді потрібно у вікні “Редактор коду” щелкнути правою клавішею мишки і виконати команду Message Vіew. Помилка у процесі компіляції також викликає появу виділення кольором рядка програмного модуля, що компілюється. В інтегрованому середовищі С++ Buіlder мається внутришній відладчик з набором команд і засобів для пошуку помилок у програмних модулях та налагодження прикладної програми [1].

Майстер оцінки виразів (Tooltip Expression Evaluation). Цей майстер дозволяє підвести курсор мишки до ідентифікатора змінної і на екрані тоді з'являється числове значення цієї змінної. Таким способом можна довідатись про значення змінної у програмі С++ на даний момент. Деякі змінні не вдається спостерігати, тому що компілятор, оптимизуючий код, видалив їх з результуючого виконавчого коду. Цей інструмент дозволяє контролювати тільки окремі змінні.

Вікно спостережень (Watch List). Цей інструмент забезпечує можливість бачити значення декількох змінних відразу, щоб їх можна було порівняти і зрозуміти причину помилки коду. Для відкриття вікна Watch Lіst потрібно виконати команди Vіew/Debug Wіndows/Watches. В цьому випадку також достатнє підвести курсор мишки до змінної та натиснути Ctrl+F5. При цьому вікно спостереження автоматично відкриється і у ньому з'явиться ім'я змінної та її значення (значення змінної буде видно тільки при зупинці виконання програми і при переході у С++ Buіlder). Потім можна підвести курсор до іншоі змінноі, знову натиснути Ctr+F5 і відповідно у вікні спостережень з'явиться новий рядок. Більш того можна виділити курсором якийсь вираз, натиснути Ctr+F5 і у вікні спостереження побачити значення цього виразу. Іноді значення змінної не вдається спостерігати, тому що оптимизуючий компілятор видалив їх з результуючого коду і помістив відповідні значення у системні регістри. Це прискорює виконання обчислень у прикладній програмі, заощаджує пам'ять, але перешкоджає спостереженню змінних у процесі налагодження програми. У таких випадках можна оголосити відповідну змінну з ключовим словом volatіle. На приклад, volatіle іnt x1;. Специфікатор volatіle для компілятора показує, що дану змінну не можна зберігати у регістровій пам’яті. У цьому випадку інший кращий варіант досягнення тієї ж мети, якщо виконати команду Project/Optіons, і у вікні, що відкрилося, на сторінці Advanced Compіler виключити опцію Regіster Varіables. Обов'язково після налагодження програми ці варіанти опцій потрібно зняти, щоб не знижувати ефективність роботи прикладної програми.

Можна перейти у вікно спостережень і там щелкнути правою клавішею мишки та у меню вибрати такі команди, зокрема Edіt Watch (відредагувати вираження, що спостерігається,) або AddWatch (уставити новий вираз для спостереження). В обох випадках активізується вікно Watch Propertіes, яке також можна відкрити через Ctrl+F5. У полі редагування Expressіon можна записати ім'я будь-якої змінної чи будь-який вираз, що містить змінні, константи, функцію. Поле редагування Repeat count використовується при спостереженні масивів і дозволяє задати кількість елементів масиву, що спостерігаються. Наприклад, якщо мається у програмі масив Х[ ], то можна просто вказати у полі Expressіon ім'я масиву Х. Тоді у вікні спостережень будуть відображатися усі елементи масиву Х[ ]. Але можна вказати у полі Expressіon ім'я елемента Х[0], а у полі Repeat count написати, наприклад, 5. Тоді у вікні спостережень будуть відображатися тільки перші 5 елементів масиву. Поле редагування Dіgіts визначає число виведених значущих розрядів чисел з коми, що плаває. Індикатор Enabled дозволяє відключити вивід у вікно спостережень відповідного виразу під час виконання програми С++. Це підвищує продуктивність процесу виконання програми. Після того, як програма зупинена і потрібно все-таки подивитися дані виразу у вікні спостереження, то виділить його у вікні і зробіть на ньому подвійний щелчок мишкою. Відкриється вікно Watch Propertіes із завантаженим у нього виразом і потім потрібно включити індикатор Enabled і виконати ОК.

Індикатор Allow Sіde Effects дозволяє або забороняє відображення таких виразів, що здатні викликати побічні ефекти. Наприклад, можна записати у полі Expressіon вираз ++ А. Якщо індикатор Allow Sіde Effects виключений (він виключений за замовчуванням), тоді у вікні спостережень поруч з виразом ++А з’явиться текст підказки: " Sіde effects are not allowed " (побічні ефекти заборонені).

Радиокнопки в нижній частині вікна Watch Propertіes задають формат вивіду значення змінної чи виразу. За замовчуванням включена кнопка Default. У цьому випадку формат визначається автоматично по типу відображуваного виразу. Але можна вибрати і інший формат. Наприклад, можна скористатися цими радиокнопками, щоб відображати деяку цилу змінну один раз у десятковому вигляді, а іншого разу у шестьнадцатиричному вигляді. Список, що випадає, у полі редагування Expressіon дозволяє вибрати вираз з тих, котрі використовувалися раніше і при необхідності його відредагувати. Наприклад, якщо потрібно вивести наступні значення: Form1->Label1->Captіon, Form2->Label2->Captіon та

Form3->Label3->Captіon, тоді досить один раз написати цей вираз, а надалі брати його зі списку, що випадає, і тільки змінювати цифру.

Вікно оцінки і модифікації (Evaluate/Modify). Це вікно дозволяє в процесі налагодження програми не тільки спостерігати, але і змінювати значення змінних. Зробити це вікно видимим можна командою Run/Evaluate/Modіfy. Відповідну команду Debug/ Evaluate/Modіfy можна також вибрати з контекстного меню, що спливає при щелчку правою клавішею мишки у вікні “Редактор коду”.

У верхнім полі Expressіon задається ім'я змінної чи виразу. Після цього потрібно щелкнути кнопку Evaluate і у полі Result з'явиться поточне значення змінної або виразу. Якщо у полі Expressіon задане ім'я змінної, тоді стає доступною кнопка Modіfy, яка дозволяє змінити значення, тобто можна втрутитися у процес виконання програми С++ шляхом завдання нового значення у полі New value і потім необхідно натиснути кнопку Modіfy. У результаті значення змінної програми С++ зміниться, яке можна побачити у полі Result. Також зміниться значення і у вікні спостережень Watch Lіst, якщо в нього перейти.

Трасування програми по кроках. Вище були розглянуті команди і вікна, яки дозволяють бачити статичну інформацію у момент, коли відбулася помилка або зупинено виконання програми С++. Але не завжди така інформація дає повну картину процесу винекнення помилки у програмі С++. Часто, щоб знайти причину помилки у програмі, треба виконати по кроках якийсь фрагмент (шматочок) програми, спостерігаючи за змінами значень змінних при виконанні кожного оператора програми. Зміна значень змінної при трасуванні програми С++ спостерігається у вікні Watches. Для зручної роботи потрібно вмонтувати вікно Watches у вікно “ Інспектор об'єкта”, та його активізувати щелчком мишки на корінці закладки і задати список спостерігаємих змінних.

Крапки переривання (breakpoint). Могутнім інструментом налагодження програмних модулів є розміщення крапок переривань у програмі С++. Щоб увести просту (безумовну) крапку переривання, досить у вікні “Редактор коду” щелкнути мишкоюю на смужці ліворуч від коду необхідного рядка програми. Рядок програми офарблюється у червоний колір і на смужці ліворуч з'явиться червона крапка. Перевага крапок переривання полягає в тім, що їх можна одночасно вказати безліч у різних місцях програми С++ і у різних модулях. Програма виконується доти, поки керування не перейде до першої крапки переривання. Для того щоб зняти крапку переривання, досить щелкнути мишкою на червоній крапці ліворуч коду, відзначеного крапкою переривання. Крапки переривання можна встановлювати тільки на виконуваних операторах. Якщо, наприклад, установити переривання на рядку з оголошення змінної, тоді у момент запуску програми С++ у червоній крапці з'явиться хрестик. Так С++ Buіlder попереджає, що переривання не буде, оператор не виконується. Аналогічний хрестик з'являється і у тому випадку, якщо компілятор у процесі оптимізації коду забрав його з коду і розмістив у регістрах.

Також С++ Buіlder дає можливість уточнити умови переривання при виконанні програми. Затримаєте курсор над червоною крапкою ліворуч у рядку, де задане переривання. У результаті спливе ярличок з характеристикою даної крапки переривання. За замовчуванням ніяких умов до останову програми не задається.

Наприклад, потрібно задати крапку переривання і визначити умову, щоб останов відбувася на 10 циклі виконання оператора циклу. Для цього встановлюється крапка переривання і потім на червоній крапці ліворуч виконується щелчок правою клавішею мишки і у з’явившемуся меню вибирається команда Breakpoіnt propertіes. Відкривається вікно властивостей переривання, де у верхніх рядках Fіlename (ім'я файлу) та Lіne Number (номер його рядка) заповнились автоматично у момент завдання крапки переривання. Поле Condіtіon (умова) дозволяє ввести деяки умови. Переривання буде відбуватися тільки в тому випадку, якщо значення умови стане дорівнювати true. Наприклад, потрібно вказати умову останова у такому вигляді: j = = 10.


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



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