Каждый раз, когда пользователь сообщает об ошибке, например
System.Runtime.InteropServices.SEHException - Внешний компонент вызвал исключение?
Могу ли я, как программист, что-нибудь сделать, чтобы определить причину?
Сценарий: об этой ошибке сообщил один пользователь (использующий программу, написанную моей компанией). Это могло быть или не быть разовой ошибкой. Они упомянули, что за последний месяц компьютер дважды «переставал работать». На собственном опыте я научился не понимать это описание слишком буквально, поскольку обычно это означает, что кто-то, имеющий отношение к компьютеру, работает не так, как ожидалось. Они не смогли предоставить мне более подробную информацию, и я не смог найти никаких зарегистрированных ошибок. Следовательно, это могла быть или не быть эта ошибка.
Из трассировки стека фактическая ошибка возникла при создании класса, который напрямую не вызывает какой-либо код взаимодействия, но, возможно, осложнен тем, что объект может быть частью списка, привязанного к DevExpress Grid.
Ошибка была «поймана» подпрограммой необработанного исключения, которая обычно закрывает программу, но имеет возможность игнорировать и продолжить. Если они решили проигнорировать ошибку, программа продолжала работать, но ошибка возникла снова при следующем запуске этой процедуры. Однако после закрытия и перезапуска нашего приложения этого не произошло.
Рассматриваемый компьютер, похоже, не был перегружен. Он работает под управлением Vista Business, имеет 2 ГБ памяти и, согласно диспетчеру задач, он использовал только около половины этой памяти с нашим приложением, всего около 200 МБ.
Есть еще одна информация, которая может иметь или не иметь отношения к делу. В другом разделе той же программы используется сторонний компонент, который по сути представляет собой оболочку dotnet вокруг собственной библиотеки DLL, и у этого компонента есть известная проблема, при которой очень иногда вы получаете
Попытка прочитать или записать в защищенную память. Это часто указывает на то, что другая память повреждена.
Производители компонентов говорят, что это было исправлено в последней версии их компонентов, которые мы используем внутри компании, но это еще не было передано заказчику.
Учитывая, что последствия ошибки незначительны (работа не теряется, перезапуск программы и возвращение туда, где они были, занимает не более минуты) и учитывая, что заказчик вскоре получит новую версию (с обновленной третьей- party), я, очевидно, могу скрестить пальцы и надеяться, что ошибка больше не повторится.
Но могу ли я еще что-нибудь сделать?