Як працює налагоджувач. Приклад налагодження програми До чого дійшли

Розглянемо процес налагодження програми, що вирішує рівняння виду АХ + В = 0 без збереження даних у файлі (постановку завдання див. в гл. 3). Вважатимемо, що форма містить лише елементи, поміщені на вкладці "Дані" (рис. 3.5), і має вигляд (рис. 8.6). Імена текстових вікон для введення коефіцієнтів TBA та TBB, а також ім'я мітки для виведення кореня LBX, розміщені всередині графічних зображень зазначених об'єктів. Імена СВ1, СВ2 та СВ3 присвоєні командним кнопкам. Імена даних А, В, Х для коефіцієнтів a, b та кореня Х відповідно. Вхідні та вихідні дані


ВХІД

Мал. 8.7. Р-граф програми


Таблиця 8.1 Умовні позначення до рис. 8.7 Умови Дії Процедура InDan() Реалізується об'єктами управління формою Те саме Те саме
Натиснуто кнопку завершення програми Натиснута кнопка СВ2 "Корінь" Натиснуто кнопку СВ1 "Очистити" Введено символ, який можна розглядати як допустимий під час введення чисел Ініціалізація даних (присвоєння ним початкових значень) Натискання доступної кнопки, клацання миші або введення символу Вибір об'єкта ТВА Вибір об'єкта ТВВ
Позначення Вихід Корінь Очистити Введено символ числа Init Введення команди Активізація TBА Активізація TBB
Продовження табл. 8.1 Реалізуюча процедура (функція) Функція MessX та оператор присвоєння Реалізується об'єктом Text Box Процедура ProgEnd Стану
Відповідна дія чи умова Розрахунок кореня рівняння та виведення в мітку LBX Додавання символу в ТВА. Додавання символу в ТВВ. Завершення програми Розпочато роботу програми, на екрані видно форму, очікується введення команди або символу На екрані видно форму, введено команду Обчислено коефіцієнти та корінь, сформовано повідомлення про коріння У буфер клавіатури введено довільний символ
Позначення LBX.Caption=MessX Simb® TBA.Text Simb® TBB.Text Зав. прог Вхід, 1

Структура програми



Ім'я модуля, об'єкта, секції Зміст
OpDan Опис даних a, b, x Public as single: Public b as single: Public x as single
Форма Form1
Секція General Sub InDan() "Ініціалізація даних I=MsgBox("Ініціалізуються дані", vbOkOnly,"") End sub Sub NullDan() "Очищення форми та даних I=MsgBox("Очищення форми та даних", vbOkOnly,"") End sub Function MessX() "Обчислення кореня I=MsgBox("Обчислено а=10, b=5, x=-2", vbOkOnly,"") MessX= "-2" End function Sub EndProg() "Завершення програми I=MsgBox ("Програма завершена", vbOkOnly, "") End sub
Form1 Sub Form1_Load() "Завантаження форми Call InDan End sub Sub Form1_Unload "Вивантаження форми з пам'яті Call EndProg() End sub
CB1 Sub CB1_Click() "Натискання кнопки Очистити Call NullDan End sub
CB2 Sub CB1_Click() "Натискання кнопки Корінь LBX.Caption=MessX() End sub
CB3 Sub CB3_Click() "завершення програми Call EndProg End End sub

Мал. 8.8. Структура програми

При цьому коді програми відбувається тестування інтерфейсу. Програма повинна реагувати на натискання кнопок появою відповідних повідомлень, клацання по об'єктах Text Box повинні встановлювати всередину об'єктів курсор, введення символу має змінювати вміст активного об'єкта Text Box. Карта тестування інтерфейсу наведено у табл. 8.2.

Таблиця 8.2

Карта тестування інтерфейсу

Назва тесту Дії програміста Реакція програми
Пуск Запуск програми Поява на екрані форми та вікна з повідомленням "Ініціалізуються дані"
Ініціалізація ТВА Курсор ставиться у ТВА
Ініціалізація ТВА Курсор ставиться у ТВВ
Введення символів Натискати алфавітно-цифрові клавіші До вмісту активного текстового вікна додаються символи, що вводяться. При натисканні клавіші "Забій" правий символ у вікні стирається
Очищення З'являється повідомлення "Очищення форми"
Розрахунок З'являється повідомлення "Обчислено а=10, b=5, x=-2"
Завершення програми

Тестування програми на рівні процедур та функцій програміста відбувається у міру написання коду процедур та функцій. Для такого тестування можна створити спеціальну форму налагодження з кнопками виклику процедур і зробити її стартовою. У разі такої необхідності немає, т.к. основна форма цілком підходить для цієї мети.

Sub InDan() "Ініціалізація даних OpDan.a=0: OpDan.b=0: OpDan.x=0 TBA.Text="": NBB.Text="" LBX.Caption="" I=MsgBox("Ініціалізуються дані "+str(OpDan.a)+" "+str(OpDan.b) +" "+str(OpDan.x), vbOkOnly,"") end sub Рис.8.9 Текст процедури InDan() під час налагодження Починаємо із процедури InDan. Призначення процедури – обнулення даних та очищення форми. Текст процедури в період налагодження наведено на рис. 8.9. В результаті тестування процедури повинні бути досягнуті результати: змінні a, b, x модуля OpDan повинні прийняти значення нуль, текстові вікна та мітка LBX мають бути порожніми.
Sub NullDan() "Очищення форми та даних OpDan.a=0: OpDan.b=0: OpDan.x=0 TBA.Text="": NBB.Text="" LBX.Caption="" I=MsgBox(" Очищення форми та даних" +str(OpDan.a)+""+str(OpDan.b)+"" +str(OpDan.x), vbOkOnly,"") End sub Рис. 8.10. Текст процедури NullDan() в момент налагодження Далі налагоджуємо процедуру очищення форми. Її текст у момент налагодження наведено на рис. 8.10. Текст процедури можна скопіювати із процедури InDan, т.к. вона виконує аналогічне призначення. У разі цілком можна замість двох процедур мати одну. Результат налагодження процедури – нульові значення даних, описаних у модулі OpDan та порожні текстові вікна та мітка LBX.
Процес налагодження обох процедур однаковий. Запустивши програму виконання можна за повідомленнями проконтролювати правильність виконання процедур. У разі неправильних результатів можна перейти в покроковий режим і, наводячи покажчик миші на імена даних, контролювати результати обчислень. Можливе застосування покрокового режиму з включенням вікна Watches, в яке слід додати імена перерахованих вище змінних.
Function MessX() "Обчислення кореня Dim S as String OpDan.a=val(TBA.Text) OpDan.b=val(TBB.Text) If a<>0 then S=str(-b/a) Elseif ((a=0) and (b=0)) then S="Невизначений корінь" Elseif ((a=0) and (b=0)) then S=" Корінь не існує" End if MessX= S TBA.Text = str(OpDan.a) TBB.Text = str(OpDan.b) LBX.Caption = str(OpDan.b) ", vbOkOnly,"") End function Мал. 8.11. Текст функції MessX у момент налагодження Налагодження функції MessX (рис. 8.10) виконується у покроковому режимі з установкою курсору перший оператор тексту функції. Доцільно включити вікна Watches і Locals і додати до першого з них імена змінних з модуля OpDan, а друге буде виводитися значення змінної S. Для налагодження використовуються три набори даних: a = 10.6, b = 31.8; · a = 0, b = 0; · a = 0, b = 10. Програма запускається командою Debug/Run to Cursor. Набір даних вводиться через вікна форми. Виконання програми переривається оператору OpDan.a=val(TBA.Text). Далі, застосовуючи команду "Debug/Step Into", виконуємо програму в покроковому режимі та відстежуємо значення змінних.

Перший набір даних ініціює виконання оператора S=str(-b/a), другий – оператора S="Невизначений корінь", третій – оператора S="Корінь не існує". У першому випадку значення кореня дорівнює (-3). Обчислені значення коефіцієнтів та кореня можна спостерігати на формі у текстових вікнах та мітці LBX.

Тестування завершеного коду програми виконується відповідно до карти тестування програми (табл. 8.3).

Таблиця 8.3

Карта тестування програми

Назва тесту Дії програміста Реакція програми
Пуск Запуск програми Поява на екрані форми та вікна MsgBox з повідомленням "Ініціалізуються дані"
Ініціалізація ТВА "Клацання" мишею по текстовому вікну TBA Курсор ставиться у ТВА
Ініціалізація ТВА "Клацання" мишею по текстовому вікну TBB Курсор ставиться у ТВВ
Введення набору даних Ввести набір даних · a = 10.6, b = 31.8; · a = 0, b = 0; · a = 0, b = 10.2 В активному текстовому вікні (ТВА або ТВВ) з'являються дані, що вводяться. Повинна діяти клавіша "Забій2
Очищення "Клацання" мишею по кнопці "Очистити" З'являється повідомлення "Очищення форми", далі очищаються текстові вікна та мітка LBX
Розрахунок "Клацання" мишею по кнопці "Корінь" З'являється повідомлення "Обчислені а, b, x", на формі з'являються обчислені значення коефіцієнтів та коренів
Повернення Повторити один за одним тести "Очищення", "Введення даних" та "Розрахунок" Очищується форма, вводяться дані, обчислюється корінь, виводяться коефіцієнти (повторно) та корінь
Завершення програми "Клацання" мишею по кнопці "Вихід" або по кнопці "Х" З'являється повідомлення "Програма завершена"

Далі з тексту процедур та функції видаляємо оператори, показані нормальним шрифтом, та виконуємо повторне тестування програми відповідно до карти тестування програми. Результати повинні бути ідентичними, але відсутні налагоджувальні повідомлення.

8.2. Створення інсталяційного комплекту
програмного засобу

Після завершення роботи з налагодження програмного засобу досить легко отримати її код, що виконується. Він може бути побудований у двох формах: як незалежний код, що виконується, і як P-cod (псевдокод), для виконання якого необхідний файл, що входить в комплект поставки Visual Basic і забезпечує виконання програми. Перший код довший, але може працювати без будь-яких добавок Visual Basic, другий код коротше, але вимагає наявності вказаного файлу. Зазвичай віддають перевагу першому варіанту. Спосіб компіляції вказується у вікні "Властивості проекту".

Для побудови інсталяційного комплекту (дистрибутиву) запускається спеціальний додаток (Application SetupWizard для Visual Basic 5 та Package and Deployment Wizard для Visual Basic 6). Процес створення дистрибутива відбувається у діалоговому режимі кілька кроків. Загальний вигляд вікон програми (майстра) Application Setup Wizard наведено на рис. 8.12.

а) б) Мал. 8.12. Вікна програми Application SetUp Wizard "Вибір проекту та налаштування" (а) та "Метод поширення" (б) У першому вікні Application Setup Wizard виводяться різні повідомлення, зокрема, про призначення програми та основні дії, які вона виконує. Це вікно тут не показано. Наступним кроком є ​​вибір проекту для створюваного інсталяційного комплекту та налаштування роботи програми. Для цієї мети служить вікно "Вибір проекту та налаштування" (рис. 8.12, а). У цьому вікні встановлюється шлях до файлу проекту та опції, що дозволяють відкрити програму встановлення зі створенням або без створення залежного файлу, створити комплект постачання для розповсюдження через Internet і створити залежний файл. У наступному вікні "Метод поширення" (рис. 8.12,б) вибирається спосіб розміщення комплекту на носіях: на одній дискеті, в одному каталозі на жорсткому диску для копіювання на CD-Rom або в декількох каталогах з іменами Disk1, Disk2, … для створення комплект дискет.
а) б) Мал. 8.13. Вікна програми Application Setup Wizard "Каталог-приймач" (а) та "Підсумковий файл" (б) У наступному вікні робиться вибір каталогу-приймача, який міститиме інсталяційний комплект, що створюється. У цьому вікні вказується диск та шлях до файлів інсталяційного комплекту. Дерево папок дозволяє вибрати потрібний шлях до вказаних файлів. У наступному вікні майстра вказуються серверні та локальні компоненти ActiveX. Це вікно малюнку не показано. У передостанньому вікні програми "Підсумковий файл" (рис. 8.13,б) показані файли, що приєднуються до файлів проекту. Як правило, це бібліотеки *.dll. Application Setup Wizard автоматично складає список файлів, які потрібно додати до комплекту. Є можливість додати свої файли, крім доданих програмою автоматично. В останніх двох вікнах виводяться повідомлення про те, що комплект зібрано, і робота програми завершена. Ці вікна

нічим не примітні та у посібнику не показані.

Компілятори (ассемблери) та редактори зв'язків.

Ці класи програм слід об'єднати, т.к. до постачання будь-якого сучасного компілятора входить і редактор зв'язків.

Компілятор (асемблер) формує об'єктний код, перекладаючи програму з мови програмування (мови асемблера), а редактор формує файл, збираючи об'єктні та бібліотечні файли і редагуючи перехресні посилання.

Для компіляторів можна вказати такі характеристики:

Мова, з якої проводиться компіляція;

Діалект/стандарт мови;

Апаратні платформи та ОС, для яких може формуватися об'єктний та здійсненний файл;

Наявність можливості та якість оптимізації коду;

Формати підтримуваних об'єктних, бібліотечних та здійснюваних файлів;

Представники C/C++: Intel C++ Compiler, Borland C++ Compiler, Watcom C++, GNU C.

Pascal: Free Pascal, GNU Pascal.

Редактор текстів.

Призначені для введення та коригування текстів програм. Можуть бути як загальними, і призначеними підтримки конкретних мов чи середовища.

Характеристики:

Формат та кодування оброблюваних файлів;

Можливість виділення лексем у тексті;

Можливість підтримки оформлення тексту відповідно до парадигм мови;

Можливість викликати процес компіляції з редактора;

Можливість генерації частини тексту програми (частіше буває у редакторів, а середовищ).

Відладчики.

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

Розрізняють два основні типи відладчиків:

Відладники користувальницького режиму;

Налагоджувачі режиму ядра.

Перші можуть лише стежити за роботою програм режиму користувача і не здатні ні відстежувати системні виклики, ні стежити за роботою ядра. Крім того, для використання таких налагоджувачів програма має бути відповідним чином підготовлена ​​(скомпільована).

Відладники режиму ядра, навпаки, дозволяють повністю контролювати роботу системи, а, отже, і всіх програм.

Характеристики:

Тип (режим ядра/користувач);

Підтримка символьної налагодження (здатність читати вихідні коди програми та працювати з ними). Набір мов, що підтримуються (серед/діалектів);

Набір інформації, що відображається: регістри процесора, стек, пам'ять (режими відображення вмісту пам'яті);

Режими налагодження, що підтримуються: покроковий, з точками зупинки, з реакцією на події в системі;

Склад подій, що відстежуються в системі: апаратні переривання, звернення до драйвера (іншого модуля ядра), виклик функції і т.д.

- (зазвичай для відладчиків режиму ядра) вимоги до апаратної підтримки, можливість роботи на «живій» системі;

Можливість аналізу файлів дампи.

Представники:

Відладчики користувача режиму: Turbo Debugger (Borland Software Corporation), Cool Debugger (Wei Bao), W32Dasm, AQtime, FlexTracer, GNU Debugger.

Відладчики режиму ядра: i386kd/alphakd/ia64kd та WinDbg (Microsoft Corporation) (для роботи в "живу" вимагають 2 машини. Для обходу цього обмеження існує надбудова LiveKd (Mark E. Russinovich)), SoftIce (NuMega).

Налагодження програми

Налагодження- Етап розробки комп'ютерної програми, на якому виявляють, локалізують та усувають помилки. Щоб зрозуміти, де виникла помилка, доводиться:

  • впізнавати поточні значення змінних;
  • з'ясовувати, яким шляхом виконувалася програма.

Існують дві взаємодоповнюючі технології налагодження.

  • Використання відладчиків - програм, які включають в себе інтерфейс для покрокового виконання програми: оператор за оператором, функція за функцією, з зупинками на деяких рядках вихідного коду або при досягненні певної умови.
  • Виведення поточного стану програми за допомогою розміщених у критичних точках програми операторів виведення - на екран, принтер, гучномовець або файл. Виведення налагоджувальних відомостей у файл називається журналом.

Місце налагодження у циклі розробки програми

Типовий цикл розробки, що за час життя програми багаторазово повторюється, виглядає приблизно так:

  1. Програмування - внесення до програми нової функціональності, виправлення помилок у наявній.
  2. Тестування (ручне або автоматизоване; програмістом, тестером або користувачем; «димове», в режимі чорної скриньки чи модульне…) – виявлення факту помилки.
  3. Відтворення помилки – з'ясування умов, за яких помилка трапляється. Це може виявитися непростим завданням при програмуванні паралельних процесів і деяких незвичайних помилках, відомих як гейзенбаги .
  4. Налагодження- Виявлення причини помилки.

Інструменти

Здібності програміста до налагодження - це, мабуть, найважливіший фактор у виявленні джерела проблеми, але складність налагодження сильно залежить від мови програмування, що використовується, і інструментів, зокрема, відладчиків.

Інструменти налагодження

Відладчик є програмним інструментом, що дозволяє програмісту спостерігати за виконанням досліджуваної програми, зупиняти і перезапускати її, проганяти в уповільненому темпі, змінювати значення в пам'яті і навіть, у деяких випадках, повертати назад за часом.

Також корисними інструментами в руках програміста можуть бути:

  • Профілювальники. Вони дозволять визначити скільки часу виконується той чи інший ділянку коду, а аналіз покриття дозволить виявити ділянки коду, що не виконуються.
  • API логери дозволяють програмісту відстежити взаємодію програми та Windows API за допомогою запису повідомлень Windows у лог.
  • Дизассемблери дозволять програмісту подивитися асемблерний код файлу, що виконується.
  • Сніфери допоможуть програмісту простежити мережевий трафік програмою, що генерується.
  • Сніфери апаратних інтерфейсів дозволять побачити дані якими обмінюється система та пристрій.
  • Логи системи.

Інструменти, що знижують потребу у налагодженні

Інший напрямок - зробити, щоб налагодження потрібне було якомога рідше. Для цього застосовуються:

  • Контрактне програмування – щоб програміст підтверджував іншим шляхом, що йому на виході потрібна саме така поведінка програми. У мовах, де контрактного програмування немає, використовується самоперевірка програми у ключових точках.
  • Модульне тестування - перевірка поведінки програми частинами.
  • Статичний аналіз коду – перевірка коду на стандартні помилки «по недогляду».
  • Висока культура програмування, зокрема, патерни проектування, угоди про іменування та прозора поведінка окремих блоків коду – щоб оголосити собі та іншим, яким чином має поводитися та чи інша функція.
  • Широке використання перевірених зовнішніх бібліотек.

Безпека програмного коду та налагодження

У програмному коді може бути так звана недокументована поведінка - серйозні помилки, які не виявляються при нормальному ході виконання програми, проте дуже небезпечні для безпеки всієї системи у разі цілеспрямованої атаки. Найчастіше це результат помилок програміста. Найбільш відомі приклади - це SQL-ін'єкція та переповнення буфера. В даному випадку завдання налагодження це:

  • Виявлення недокументованої поведінки системи
  • Усунення небезпечного коду

Вирізняють такі методи:

  • статичний аналіз коду На цій фазі програма сканер шукає послідовності у вихідному тексті, що відповідають небезпечним викликам функцій тощо. буд. Фактично йде сканування вихідного тексту програми з урахуванням спеціальної бази правил, що містить опис небезпечних зразків коду.
  • фазинг. Це процес подання на вхід програми випадкових чи некоректних даних та аналіз реакції програми.
  • Reverse engineering (Зворотна інженерія). Цей випадок виникає, коли незалежні дослідники шукають уразливості та недокументовані можливості програми.

Література

  • Стів Магьюїр, "Створення надійного коду" (Steve Maguire. Writing Solid Code. Microsoft Press, 1993)
  • Стів Мак-Коннел, "Довершений код" (Steve McConnel. Code Complete. Microsoft Press, 1993)

також

Посилання

  • Налагодження AMD64 на рівні машинного коду за допомогою відладчика dbx (укр.)

Wikimedia Foundation. 2010 .

Дивитись що таке "Налагодження програми" в інших словниках:

    Етап розробки комп'ютерної програми, у якого відбуваються виявлення, локалізація і усунення явних помилок у програмі. Зазвичай, налагодження виконується на контрольних прикладах з відомими результатами. Англійською: Program debugging… … Фінансовий словник

    налагодження програми- контроль програми перевірка програми програмний контроль - [Л.Г.Суменко. Англо-російський словник з інформаційних технологій. М.: ДП ЦНИИС, 2003.] Тематики інформаційні технології загалом Синоніми контроль програмиперевірка… …

    налагодження програми- налагодження програми; налагодження Процес виявлення та виправлення помилок у програмі, а також встановлення факту її правильного функціонування в машині.

    налагодження (програми)- - [А.С.Гольдберг. Англо-російський енергетичний словник. 2006 р.] Тематики енергетика загалом EN debugging … Довідник технічного перекладача

    На ЕОМ виявлення та виправлення помилок у програмі для ЕОМ за допомогою самої машини. Виробляється у 2 етапи: 1) автономна перевірка отд. дільниць програми; 2) комплексна перевірка шляхом рішення за програмою, що налагоджується, дек. прикладів, результати … Великий енциклопедичний політехнічний словник

    налагодження- Програми; налагодження Процес виявлення та виправлення помилок у програмі, а також встановлення факту її правильного функціонування в машині. Політехнічний термінологічний тлумачний словник

    налагодження машинної програми- - [А.С.Гольдберг. Англо-російський енергетичний словник. 2006 р.] Тематики енергетика загалом EN code refinement … Довідник технічного перекладача

    Налагодження- (1) програми систематичний процес пошуку та усунення (див.) в (див.), що виробляється за результатами її прогону на ЕОМ або за допомогою спеціальної допоміжної програми (відладчика), що забезпечує заданий режим її налагодження та видає… Велика політехнічна енциклопедія

    Налагодження етап розробки комп'ютерної програми, на якому виявляють, локалізують та усувають помилки. Щоб зрозуміти, де виникла помилка, доводиться: дізнаватися про поточні значення змінних; і з'ясовувати, яким шляхом виконувалася програма.

Книги

  • Android для користувача. Корисні програми та поради , Колісниченко Денис Миколайович , Розглянуті найцікавіші, корисні та найбільш популярні серед вітчизняних користувачів Android-додатки. Дано поради, як перетворити Android-пристрій на пульт дистанційного… Категорія: Операційні системиВидавець:

Ще одним модулем системи програмування, функції якого тісно пов'язані з виконанням програми, є налагоджувач.

Відладчик- це програмний модуль, що дозволяє виконати основні завдання, пов'язані з моніторингом процесу виконання результуючої прикладної програми. Цей процес називається налагодженням і включає наступні основні можливості:

    послідовне покрокове виконання результуючої програми на основі кроків машинними командами або операторами вхідної мови;

    виконання результуючої програми до досягнення нею однієї із заданих точок зупинки (адрес зупинки);

    виконання результуючої програми до настання деяких заданих умов, пов'язаних із даними та адресами, що обробляються цією програмою;

    перегляд вмісту областей пам'яті, зайнятих командами або даними результуючої програми.

Спочатку відладчики були окремими програмними модулями, які могли обробляти результуючу програму в термінах мови машинних команд. Їхні можливості в основному зводилися до моделювання виконання результуючих програм в архітектурі відповідної обчислювальної системи. Виконання могло йти безперервно чи кроками.

Подальший розвиток відладчиків пов'язаний з такими важливими моментами:

появою інтегрованих середовищ розробки;

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

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

програмне забезпечення. При цьому відладники перестали бути окремими модулями і стали інтегрованою частиною систем програмування, оскільки вони повинні були тепер підтримувати роботу з таблицями ідентифікаторів і виконувати завдання, що обернено ідентифікації лексичних одиниць мови. Це з тим, що у такому середовищі налагодження програми у термінах імен, даних користувачем, а чи не в термінах внутрішніх імен, присвоєних компілятором. Відповідні зміни були потрібні також у функціях компіляторів і компонувальників, оскільки вони повинні були включати таблицю імен до складу об'єктних та виконуваних файлів для її обробки налагоджувачем.

Другий крок дозволив значно розширити можливості середовищ» | задачу відладчика входили юпм функції перекладу обчислювальної системи у відповідності з цнп pi ч им перед запуском результуючої програми на налагодження. прапорів процесора обчислювальної стати

Відладники в сучасних системах програмування.н.н. являють собою модулі з розвиненим інтерфейсом піт, юн.і.-і.. працюють безпосередньо з текстом і модулями m-одному програми. Багато їх функцій інтегровані з функціями нч< ют... редакторов исходных текстов, входящих в сое urn in. .«mi программирования.

Розглянемо можливості відладника системи npoi раммпроп.мм. Delphi. Це потужний налагоджувач, вбудований непосрд» ними... ,-інтегроване середовище розробки. Набір підтримувані - їм .\, п\ """

включає все, що можна очікувати від відладчика: трасування та піт. і

виконання, встановлення точок зупинки, додавання та про, м. .,. контрольованих значень, обчислення та модифікацію дат п.I->>.-перегляд вмісту стека.

Крапкизупинка (breakpoints) або просто ociaiumi.i, пот..,.,..-при виконанні певних умов приостановим. p,.i.,. t, програми. Найчастіше точки зупинки розміщувався в onpi д. п. пи -рядку коду, при цьому зупинка відбувається в той момеш, ккд., д.мт. , Рядок повинен почати виконуватися. Такий зупинка можна в< ми,.п..., например, щелкнув слева от строки кода. Если ш-ш.- ..м.» < проанализировать поведение программы внутри опред.-тч...,.,

процедури або функції, досить просто встановити 1 очку о(ми

е першому рядку.

Умовна крапка зупинка. Можна задати додатки< поим. >ючке зупинки, і тоді програма буде припиняв -.. м досягненні певного рядка коду тільки при ополчч

СучаснийГуманітарнийУніверсіт

Сучаснийfyw

у» мпіїн. Типовим випадком застосування такої точки зупинки буде прпнорка коду всередині циклу. Ймовірно, ви не захочете зупиняти і міні, запускати програму щоразу, коли виконується цикл – а це відбувається сотні, а то й тисячі разів. Замість того, щоб безперервно здійснювати повторний запуск програми, можна встановити точку мошнова після досягнення певної змінної певного значення.

Крапка зупинка по зверненню до даними. Цей тип точки зупинки зупиняє виконання програми під час модифікації певної ділянки пам'яті. Він застосовується для низькорівневої| ласі, коли відстежуються помилки присвоєння значень змінним. Можна також ввести початкову адресу області пам'яті, ююрую і poOyei ся контролювати, і її розмір (в байтах). Встановлюючи необхідний розмір, можна контролювати змінну будь-якого типу I» char (1 байт) і Integer (4 байта) до масиву або запису довільного розміру. Як і в разі точки зупинки за умовою, можна ввести вираз, який буде критерієм зупинки при зміні області пам'яті.

Крапка зупинка по адресою. Зупинка за адресою реалізується, коли виконується інструкція, що у пам'яті за заданою адресою. Ці точки зазвичай встановлюються; якщо неможливо встановити звичайну точку зупинки у певному рядку коду через відсутність вихідного коду для відповідного модуля. Як і у випадку інших видів точок зупинки, можна задати умови припинення виконання програми.

Крапка зупинка по завантаженні модуля, Як випливає з назви зупиняє виконання програми, що налагоджується при завантаженні зазначеного модуля.

Групи точок зупинка є однією з найпотужніших і найефективніших функцій інтегрованого відладчика. За допомогою механізму груп, будь-яка точка зупинки може бути активізована або деактивізована іншою точкою зупинки, що дозволяє будувати вельми складні алгоритми функціонування груп точок зупинки, призначені для виявлення найбільш невловимих і специфічних помилок.

Покроковевиконанняпрограми. Програму можна виконувати послідовно, рядок за рядком, використовуючи команди Step Over або Trace Into (за промовчанням клавіші і відповідно). Команда Trace Into при виконанні програми забезпечує вхід у викликані процедури та функції, а команда Step Over негайно їх виконує та представляє як одну дію. Цими опціями зручно користуватися після зупинки програми у якомусь місці її тексту.

Можна також дати вказівку Delphi виконувати програму до того місця, в якому зараз знаходиться курсор - за допомогою команди Run to Cursor (клавіша ). Цю можливість зручно

використовувати для пропуску циклу, що багато виконується, щоб безперервно не натискай» клавіші і .

Використаннявікнаінспектораданих (Watch). Вікно Watch можна використовувати для контролю значень змінних під час виконання програми. Програма повинна знаходитися в режимі перегляду коду програми (тобто виконуватись якась із точок зупинки) - тільки в цьому випадку вміст вікна Watch буде коректним. У цьому вікні можна ввести певний вираз Object Pascal або вказати ім'я, визначене в програмі.

Інспекториналагодження (DebugInspector) є різновидом вікна інспектора даних. Вони мають більші можливості, і їх легше використовувати, ніж вікно Watch. У вікні інспектора налагодження можна переглядати вміст даних, що складаються з безлічі індивідуальних елементів, наприклад, таких як класи та записи.

ВикористаннякомандEvaluateіModify. Команди Evaluate та Modify дозволяють відповідно переглядати та змінювати вміст змінних, включаючи масиви та записи, "нальоту", під час виконання програми, в інтегрованому налагоджувачі. (Однак вони не надають доступу до функцій і змінних поза області видимості.)

Доступдостекувикликів (CallStack) дозволяє переглянути виклики функцій та процедур разом із переданими їм параметрами, у тій послідовності, в якій вони виконувались до певного моменту виконання програми.

Переглядпотоків (ThreadStatus). Якщо програма використовує безліч потоків, вбудований налагоджувач дозволяє отримати інформацію про кожного з них.

Журналподій (EventLog) - Це місце, в яке відладник записує інформацію про різні події. Типи подій, відомості про які можуть бути розміщені в журналі, включають запуск і зупинення процесу, завантаження модулів налагоджувачем.

ВікноCPUмістить п'ять інформаційних панелей: CPU, Memory Dump, Register, Flags та Stack. З його допомогою розробник отримує можливість дізнатися, що саме відбувається у машині. Кожна панелей дозволяє під час налагодження стежити за важливими аспектами функціонування процесора.

На панелі CPU відображаються коди операцій та мнемоніки дизассемблированного коду, що виконується в даний момент. Можна переглянути код програми за будь-якою адресою та довільно вибрати нову інструкцію для поточного виконання. Це дозволить вивчити поведінку асемблерного коду програми. Досвідченим розробникам чудово відомо, що безліч помилок знаходиться і усувається під час перевірки згенерованого асемблерного коду.

Контекстне меню вікна CPU дозволяє налаштувати зовнішній вигляд вікна, переглянути різні адреси, перейти до інструкції

СучаснийГуманітарнийУніверсі! 16

СучаснийГуманітарнийУніверситет

mimi- ш . «іviiїмituni, niiit- lu-" pnyii. csiдоll|) OCMOTpyВИХІДНОГО

коду та in i ik ir n- i m" * і-* i ч.if ч ми. м m 11"m.i потоку, в якому буде

отвору 11 him.111." ".i iiih|m ,| iM.iiimi i I"ll

На naiifiiii Мсмнну i Himp mii + ihi доглянути вміст будь-якої області нами i і;<м мдср + пммп мм-нч (н.пьпредставлено по-разному: как Byle, Woid, nwnHD. uwnni). :>inul<>, Double або Extended. Можна виконати пошук і ii.immiii mi 1ред(тонної послідовності байтів, модифікований, юнущіе д.тпіо і перейти до наступних, або послідовно, липо ииюш.муя ткані дані як покажчик.

Призначення папок.-і Honji.loi та I lags очевидно: у них відображаються і можуть бути змінені т з poincipu та с|)лаги процесора.

На панелі Stack можна переглянути пам'ять, використовувану програмою в якості сн."ка. Можна також змінювати значення і переміщатися за адресами.

Відладчик(англ. debugger) - програма, призначена для аналізу поведінки іншої програми, що забезпечує її трасування (відстеження та роздрукування виконуваних програмою команд, змін змінних або даних про інші події, пов'язані з виконанням програми), зупинку у зазначених точках або при виконанні зазначених умов, перегляд та зміна осередків пам'яті, регістрів процесора та команд програми.

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

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

Деякі проблеми важко вирішити навіть за допомогою відладчика. Наприклад, динамічні структури даних (списки та дерева) не можна досліджувати загалом; натомість потрібно вручну проходити з кожного зв'язку. Є більш серйозні проблеми типу затирання пам'яті, які викликані помилками, що знаходяться далеко від місця, де вони проявилися. У цих ситуаціях мало користі від налагоджених, націлених на виявлення таких симптомів, як «розподіл на нуль у процедурі p1».

Нарешті, деякі системи не можуть бути «налагоджені» як такі: не можна за бажанням створити тяжке становище хворого тільки для того, щоб налагодити програмне забезпечення серцевого монітора; не можна послати групу програмістів у космічний політ у тому, щоб налагодити керуючу програму польоту. Такі системи повинні перевірятися за допомогою спеціальних апаратних засобів та програмного забезпечення для моделювання вхідних та вихідних даних; програмне забезпечення у таких випадках ніколи не перевіряється та не налагоджується в реальних умовах! Програмні системи, критичні щодо надійності, стимулюють дослідження мовних конструкцій, що підвищують надійність програм і сприяють формальним методам їх верифікації.

Основні функції відладчика

Трасування(англ. trace). Покрокове виконання програми, що дозволяє програмісту точно відстежувати команди у порядку виконання.

Контрольні точки(англ. breakpoint). Засіб призначений для того, щоб змусити програму виконуватися до певного рядка в програмі. Спеціальний вид контрольної точки - точка спостереження- Викликає виконання програми, поки не відбудеться звернення до певної комірки пам'яті.