Чому "вилітають" програми

Різноманіття завдань, що вирішуються сьогодні за допомогою персональних комп`ютерів, забезпечується існуванням величезного набору прикладних програм. Зручність роботи з програмним забезпеченням багато в чому залежить від його надійності, що виражається у відсутності аварійних ситуацій. Однак багато програм «вилітають» в самий невідповідний момент. Чому?


чому




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

Незалежно від типу, виняток може бути перехоплено і коректно оброблено. Чи не перехоплені винятку потрапляють в кореневій обробник бібліотеки часу виконання або обробник, який встановлюється операційною системою. Якщо це сталося, програма «вилітає» з відображенням повідомлення або вікна аварійного завершення (в Windows). Якщо обробник операційної системи не спрацював (наприклад, був навмисне видалено), програма «падає мовчки». Таким чином, програми «вилітають» внаслідок виникнення виключень, які не можуть бути оброблені. Причини ж виникнення виключень - різні.

У переважній більшості випадків програми «вилітають» внаслідок виконання їх власного коду, що містить явні чи неявні помилки реалізації. Перелік можливих причин виникнення позаштатних ситуацій дуже великий. Це і класичні помилки операцій над числами з плаваючою точкою (наприклад, розподіл на 0), і помилки роботи з пам`яттю (читання або запис за межами адресного простору процесу, доступ до захищених сторінок, запис в області пам`яті, призначені тільки для читання), переповнення стека внаслідок нескінченної рекурсії, і т.д. У цих випадках генеруються апаратні виключення або виключення операційної системи.

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

Помилки реалізації можуть міститися і в зовнішніх компонентах, які використовуються додатком. Наприклад, в динамічних бібліотеках, які забезпечують необхідний функціонал або модулях доповнень. Програмний код, неявно завантаження в адресний простір процесу (наприклад, з метою перехоплення певних API-функцій), також може стати причиною «падіння» програми.

Багато компонентів і бібліотеки (наприклад, ADO в Windows) використовують механізм програмних винятків як пріоритетний спосіб повідомлення про помилки. Відсутність або недостатньо повна обробка винятків подібного роду додатком може привести до його аварійного завершення навіть в абсолютно нешкідливих ситуаціях (таких як втрата підключення до бази даних).



Увага, тільки СЬОГОДНІ!


Оцініть, будь ласка статтю
Всього голосів: 79
Увага, тільки СЬОГОДНІ!