Запобігання розкрутки стека в Visual C # (Sharp)

Обробка винятків дозволяє запобігти збій програми, але не допомагає впевнитися в тому, що стан додатки не було змінено Розглянемо приклад (рис 55), що ілюструє, як стан програми може бути іскено перехоплених, але необробленим винятком

Рис 55 Винятки можуть спотворити стан програми

При перехопленні виключення виконується розкрутка стека На рис 56 показаний прерій побічного ефекту розкрутки стека – перестрибування через виклик методу

У прикладі, показаному на рис 56, методи викликаються послідовно Першим викликається метод RunAiio, а після викидання винятку негайно випояется блок catch методу RunAii () Тому по завершенні виконання, значення змінної depth буде 2 замість очікуваного 0, яким би воно було, якби не бо згенеровано виняток Можна бачити, що розкручування стека була виконана занадто швидко, викликавши непередбачувані результати виконання програми

Таким чином, проблема передчасної розкрутки стека викликає спотворення стану програми, часом катастрофічний Удавана робочої програма може спотворити саму себе і повільно перейти в неробочий стан або почати видавати невірні результати На щастя, існує пара способів для претвращенія занадто швидкої розкрутки стека

Рис 56 Розкрутка стека може викликати пропуск виклику методу

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*