- •1.Розробка системи оперативної довідки
- •1.1.Меню Help
- •1.2. Малюнок 1. Вікно довідки. Кнопка Help в екранній формі
- •1.4.Виклик контекстно-залежної довідки кнопкою What's This?
- •1.5. Малюнок 2. Екранна форма, у якій установлена кнопка виклику контекстної довідки. Використання html Help Workshop
- •1.5.1.Створення проекту системи оперативної довідки
- •Малюнок 3. Діалогове вікно New.
- •Малюнок 4. Діалогове вікно Existing Files.
- •1.5.2.Таблиця змісту
- •Малюнок 5. Вікно щойно створеного проекту.
- •Малюнок 6. Заповнення таблиці змісту.
- •1.5.3.Предметний покажчик
- •Малюнок 7. Заповнення контекстного вказівника.
- •1.5.4.Додавання в проект html-файлів розділів довідки
- •1.5.5. Малюнок 8. Заготівля html-файлу, оформлена html Help Workshop. Зв'язки між файлами розділів і url
- •1.6.Додавання і видалення файлів розділів довідки
- •Малюнок 9. Діалогове вікно Topіc Fіles.
- •1.7.Компіляція системи оперативної довідки
- •1.8.Контекстно-залежні розділи довідки
- •Малюнок 10. Діалогове вікно Options.
- •Малюнок 11. Wizard Selection
- •Малюнок 12. Вікно Application Builder.
- •1.8.1.Включення файлу відображення в проект системи оперативної довідки
- •1.8.2. Малюнок 13. Включення файлу відображення в проект системи оперативної довідки. Зв'язування HelpContextіD з html — файлами розділів довідки
- •1.8.3. Малюнок 14. Діалогове вікно для організації зв'язування файлів розділів довідки і HelpContextі у додатку. Розділи довідки, що викликаються кнопкою What's This?
- •Малюнок 15 Екранна форма Visual FoxPro, налаштована на використання довідки What's This?
- •1.9.Поширення готової системи оперативної довідки
- •2.Пошук і обробка помилок, тестування проекту
- •2.1.Проблема помилок у програмному продукті
- •2.2.Пошук помилок у програмному коді
- •2.2.1.Синтаксичні помилки
- •2.2.2.Логічні помилки
- •2.2.3.Виключення
- •2.3.Розбивка коду на модулі для мінімізації помилок
- •2.4.Помилки при передачі параметрів
- •2.5.Використання команд exіt і return
- •2.6.Обробка ушкоджених файлів
- •2.7.Тестування та налагодження додатків
- •2.7.1.Технологія тестування
- •2.7.2.Створення середовища для тестування
- •2.7.3.Створення тестових наборів даних, що забезпечують повноту накриття додатка
- •2.7.4.Документування тестових наборів
- •2.8.Методика перехоплення помилок
- •2.9.Налагоджувальник
- •Малюнок 16. Налагоджувальник Visual FoxPro.
- •2.9.1.Використання вікна Trace
- •Малюнок 17. Панель інструментів налагодження
- •Малюнок 18 Діалогове вікно Breakpoints
- •2.9.2.Використання вікна Locals
- •Малюнок 19. Діалогове вікно Locals
- •2.9.3.Використання вікна Watch
- •Малюнок 20. Діалогове вікно Watch.
- •2.9.4.Діалогове вікно Call Stack
- •2.9.5.Використання вікна Debug Output
- •2.9.6.Діалогове вікно Event Tracking
- •Малюнок 21. Діалогове вікно Event Tracking.
- •2.10.Використання Coverage Profiler
- •Малюнок 22. Додаток Coverage Profiler у режимі відображення покриття.
- •2.11. Малюнок 23. Додаток Coverage Profiler у режимі відображення профілю. Використання процедур обробки помилок
- •2.11.1.Використання методів обробки події error в об'єктах
- •3.Література
- •4.Перелік ілюстрацій
2.8.Методика перехоплення помилок
Якщо помилка з'являється під час виконання програми, Visual FoxPro виводить на екран вікно системного повідомлення про помилку. Нижче тексту повідомлення розташовані чотири кнопки — Cancel (Скасування), Suspend (Призупинити), Ignore (Ігнорувати) і Help (Довідка). У більшості випадків не має змісту ігнорувати помилку. Якщо програма написана для користувачів, їм ніколи не рекомендується цього робити. Фактично для них навіть інформація в цьому вікні не принесе ніякої користі. Замість виводу такого вікна потрібно постаратися програмними засобами перехоплювати в додатку всі помилки й обробляти їх відповідними методами. Зокрема, можна фіксувати стан системи в момент виникнення помилки в якому-небудь файлі протоколу і коректно завершувати виконання програми11.
Однак тут, як і в будь-якім правилі, теж існують виключення. Якщо програма припиняє виконання через те, що не може знайти якийсь файл зображення на диску, то цю помилку, можливо, і варто проігнорувати. Але подібні ситуації вкрай рідкі. Практично завжди програма не може нормально функціонувати далі, якщо не одержує доступу до якогось файлу.
Для розроблювача опція Suspend досить приваблива під час тестування. При її виборі виконання програми припиняється, але поточні перемінні в пам'яті зберігаються. Усі відкриті в цей момент таблиці залишаються відкритими зі збереженням стану покажчиків записів. Дуже важливо, що після такої зупинки можна відкрити вікно Trace налагоджувальника. У цьому вікні відображається програмний код виконуваного фрагмента, причому поточний оператор виділений кольором. У розроблювача також мається можливість переглянути значення перемінних і деталі процесу виконання (наприклад, стан стека викликів) і продовжити виконання програми в покроковому режимі.
Visual FoxPro має кілька убудованих функцій, що покликані полегшити обробку помилок. Для їхнього використання насамперед потрібно відключити механізм обробки помилок, задіяний у Visual FoxPro за замовчуванням. Замість того щоб виводити на екран системне вікно повідомлення про помилку, потрібно передати керування спеціальному оброблювачу помилок. Нижче наведена проста підпрограма обробки помилок. Вона організує вивід трохи більше інформації про помилку, чим у системному вікні. Для цього використовується багатострочне вікно команди WAІT WІNDOW. Подібний прийом можна використовувати для формування протоколу помилок, їх аналіз та перехват. Зібравши подібну інформацію після декількох запусків програми з різними вхідними даними чи при різних настроюваннях середовища, можна судити про частоту появи помилки, впливі різних настроювань і т. п. Згодом так можна буде знайти “першоджерело” помилкової ситуації.
ON ERROR DO ErrLog WITH;
ERROR(), MESSAGE(), MESSAGE(1), LINENO(l), PROGRAM()
** Інші оператори додатка **
PROCEDURE ErrLog
LPARAMETER InErrorNo, IcMessage, IcErrorLine, IcErrLineNo, IcModule
WAIT WINDOW;
'Помилка виникла в:' + IcModule + CHR(13) +;
'ERROR: ' + STR(InErrorNo, 6) + ' ' + IcMessage + CHR(13) +;
'В операторі: ' + STR(IcErrLineNo, 6) + ' ' + IcErrorLine
RETURN
Функція ERROR() повертає системний номер помилки. У додатку до документа Developer's Guide перераховані всі номери помилок, що розпізнаються виконавчою системою Visual FoxPro, причому кожна помилка супроводжується коротким описом. Аналогічну інформацію можна знайти й у розділі Error Messages оперативної довідки Visual FoxPro.
Велику користь може принести функція MESSAGE(). Якщо при її виклику не передавати ніяких параметрів, функція повертає текст короткого опису помилки (правда, англійською мовою). Це той же самий опис, що виводиться й у системному вікні повідомлення. Якщо ж при виклику MESSAGE() передати параметр 1, функція поверне рядок програмного коду, що і створив аварійну ситуацію.
Функція LІNENO() повертає номер рядка програмного коду, що призупинила виконання програми. За замовчуванням номер відраховується від першого рядка головної програми додатка. Оскільки в додатку, як правило, викликаються численні функції і процедури, що розміщаються в окремих файлах, відлік від головної програми мало інформативний. При передачі в LІNENO() параметра 1 функція повертає номер рядка від початку поточної функції чи процедури. Цей номер уже більше підходить для переходу за допомогою команди EditÞGo to Line до потрібного рядка коду у вікні редактора. Редактор, що підключається до Visual FoxPro за замовчуванням, може виводити і номера рядків у файлі ліворуч від тексту, якщо його відповідно настроїти. Настроювання виконується в діалоговому вікні Edit Properties, що виводиться на екран командою Edіt1ÞProperties. У цьому вікні необхідно установити прапорець Show Line/Column Posіtіon (Показувати рядок/колонку). Якщо бажано бачити номер рядка коду у вікні Trace, виберіть команду ToolsÞOptions, відкрийте вкладку Debug і клацніть на кнопці опції Trace.
Функція PROGRAM() повертає ім'я виконуваної програми (модуля), якщо вона викликана з параметром 0, і ім'я головної програми, якщо параметр дорівнює 1. За допомогою цієї функції можна одержати й інформацію про інші підпрограми в стеці викликів, використовуючи зростаючі значення параметра доти, поки функція не стане повертати порожній рядок. Visual FoxPro підтримує до 128 рівнів вкладеності викликів. Функція PROGRAM() багато в чому нагадує SYS(16), але остання повертає не тільки ім'я підпрограми, але і шлях до відповідного файлу. При виникненні помилки SYS(16) виводить повідомлення, що починається з імені поточної підпрограми (процедури чи функції), потім шлях до файлу, у якому зберігається її програмний код, і далі — ім'я програми що визвала.
Другий параметр при виклику функції SYS(16, nLevel) настроює її на вивід імені програми на відповідному рівні вкладеності викликів. Якщо nLevel = 0, буде повернуте ім'я поточної підпрограми, що виконується. Значення 1 відповідає рівню головної програми додатка, а далі при зростанні значення nLevel перебираються імена підпрограм у стеці викликів аж до поточною, що стала причиною аварії в системі. При зростанні nLevel понад це значення буде повертатися порожній рядок. Приведений нижче код дозволяє простежити послідовність викликів, що привела до помилки:
ІnLevel = 1
DO WHILE! EMPTY(SYS(,16, InLevel))
? SYS(16, InLevel)
InLevel = InLevel+l
ENDDO