Щоразу, коли користувач повідомляє про помилку, таку як
System.Runtime.InteropServices.SEHException - Зовнішній компонент видав виняток?
чи є щось, що я як програміст можу зробити для з’ясування причини?
Сценарій: Один користувач (використовуючи програму, яку написала моя компанія) повідомив про цю помилку. Це може бути або не бути одноразовою помилкою. Вони згадали, що за останній місяць комп’ютер двічі «перестав працювати». Я дізнався з досвіду, щоб не сприймати цей опис занадто буквально, оскільки зазвичай це означає, що хтось, що має відношення до комп’ютера, працює не так, як очікувалося. Вони не змогли повідомити мені більше деталей, і я не зміг знайти жодної помилки. Отже, ця помилка могла бути або не бути.
Зі стеку-трасування фактична помилка була при побудові класу, який безпосередньо не викликає жодного коду взаємодії, але, можливо, ускладнюється тим фактом, що об'єкт може бути частиною списку, прив'язаного до сітки DevExpress.
Помилка була "спіймана" непроведеною процедурою винятків, яка зазвичай закриває програму, але має можливість ігнорувати та продовжувати. Якщо вони вирішили ігнорувати помилку, програма продовжувала працювати, але помилка повторилася під час наступного запуску цієї процедури. Однак це не повторилося після закриття та перезапуску нашої програми.
Здається, комп’ютер, про який йде мова, не зазнав напруги. Він працює під управлінням Vista Business, має 2 Гб пам’яті, і, за даними диспетчера завдань, він використовував лише половину, а наш додаток - близько 200 Мб.
Існує ще одна інформація, яка може бути або не бути релевантною. Інший розділ цієї ж програми використовує сторонній компонент, який фактично є обгорткою дотнету навколо власного dll, і цей компонент має відому проблему, коли дуже іноді ви отримуєте
Спроба читати або писати захищену пам’ять. Це часто свідчить про пошкодження іншої пам'яті
Виробники компонентів кажуть, що це було виправлено в останній версії їх компонента, яку ми використовуємо власними силами, але це ще не передано замовнику.
Враховуючи, що наслідки помилки низькі (робота не втрачається, і перезапуск програми та повернення туди, де вони були, займає не більше хвилини) та враховуючи, що клієнт незабаром отримає нову версію (з оновленою третьою - партійний компонент), я, очевидно, можу схрестити пальці і сподіватися, що помилка не повториться.
Але чи можу я щось більше зробити?