Как диагностировать ошибку SEHException — внешний компонент выдал исключение

StackOverflow https://stackoverflow.com/questions/1313853

Вопрос

Всякий раз, когда пользователь сообщает об ошибке, например

System.Runtime.InteropServices.SEHException - Внешний компонент вызвал ошибку исключения?

могу ли я как программист что-нибудь сделать, чтобы определить причину?

Сценарий:Один пользователь (использующий программу, написанную моей компанией) сообщил об этой ошибке.Это могла быть или не быть единичной ошибкой.Они упомянули, что за последний месяц компьютер дважды «переставал работать».На своем опыте я научился не воспринимать это описание слишком буквально, поскольку оно обычно означает, что кто-то, имеющий отношение к компьютеру, не работает должным образом.Они не смогли предоставить мне более подробную информацию, и я не смог найти никаких зарегистрированных ошибок.Следовательно, это могла быть или не быть эта ошибка.

Судя по трассировке стека, фактическая ошибка произошла при создании класса, который напрямую не вызывает какой-либо код взаимодействия, но, возможно, осложнен тем фактом, что объект может быть частью списка, привязанного к данным DevExpress Grid.

Ошибка была «перехвачена» необработанной процедурой исключения, которая обычно закрывает программу, но имеет возможность игнорировать и продолжить.Если они решали игнорировать ошибку, программа продолжала работать, но ошибка повторялась при следующем запуске этой процедуры.Однако после закрытия и перезапуска нашего приложения этого больше не произошло.

Компьютер, о котором идет речь, похоже, не подвергался стрессу.Он работает под управлением Vista Business, имеет 2 ГБ памяти и, по данным диспетчера задач, использует только половину этого объема, а наше приложение занимает всего около 200 МБ.

Есть еще одна информация, которая может иметь, а может и не иметь значение.В другом разделе той же программы используется сторонний компонент, который по сути является оболочкой dotnet для собственной библиотеки DLL, и у этого компонента есть известная проблема, из-за которой очень редко вы получаете

Попытка чтения или записи защищенной памяти.Это часто является признаком того, что другая память повреждена.

Производители компонентов говорят, что это исправлено в последней версии их компонента, которую мы используем, но она еще не передана заказчику.

Учитывая, что последствия ошибки невелики (никакая работа не потеряна, а перезапуск программы и возврат туда, где они были, занимает максимум минуту), а также учитывая, что клиент в ближайшее время получит новую версию (с обновленной третьей версией). party), я, очевидно, могу скрестить пальцы и надеяться, что ошибка больше не повторится.

Но могу ли я сделать что-нибудь еще?

Это было полезно?

Решение

Да.Эта ошибка представляет собой структурированное исключение, которое не было сопоставлено с ошибкой .NET.Вероятно, ваше сопоставление DataGrid выдает необработанное собственное исключение.

Вы можете определить, какое исключение происходит, посмотрев на ВнешнееИсключение.ErrorCode свойство.Я бы проверил трассировку вашего стека и, если она привязана к сетке DevExpress, сообщил им о проблеме.

Другие советы

У меня была аналогичная проблема с SEHException, которое возникло, когда моя программа впервые использовала собственную оболочку dll.Оказалось, что родная DLL для этой обертки отсутствует.Исключение никоим образом не помогло в решении этой проблемы.Что в итоге помогло, так это запуск procmon в фоновом режиме и проверка наличия ошибок при загрузке всех необходимых DLL.

если у вас возникла проблема, описанная в этом посте:

Отладчик asp.net mvc выдает SEHException

тогда решение:

если у вас есть какое-либо приложение от Trusteer (например, Rapport или что-то еще), просто удалите и перезагрузите систему, все будет работать нормально...нашел это решение здесь:

http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application

Производители компонентов говорят, что это исправлено в последней версии их компонента, которую мы используем внутри компании, но она еще не передана заказчику.

Спросите производителя компонентов, как проверить, является ли проблема, с которой сталкивается клиент, проблемой, которую, по его словам, они исправили в своей последней версии, без или до развертывания последней версии для клиента.

Я столкнулся с этой ошибкой, когда приложение находится в сетевой папке, и устройство (ноутбук, планшет и т. д.) отключается от сети во время использования приложения.В моем случае это произошло из-за того, что планшет Surface вышел из зоны действия беспроводной сети.Никаких проблем после установки более качественной WAP.

Просто еще одна информация...Была эта проблема сегодня в системе Windows 2012 R2 x64 TS, где приложение запускалось по пути unc/network.Проблема возникла для одного приложения для всех пользователей терминального сервера.Локальное выполнение приложения работало без проблем.После перезагрузки он снова начал работать - выброшенным SEHException были Constructor init и TargetInvoctionException.

Конфигурации моей машины:

Операционная система :Windows 10 версии 1703 (x64)

Я столкнулся с этой ошибкой при отладке моего проекта C# .Net в версии Visual Studio 2017 Community.Я вызывал собственный метод, выполняя p/invoke для сборки C++, загруженной во время выполнения.Я столкнулся с той же ошибкой, о которой сообщил ОП.

Я понял, что Visual Studio была запущена с учетной записью пользователя, которая не была администратором на компьютере.Затем я перезапустил Visual Studio под другой учетной записью пользователя, которая была администратором на компьютере.Вот и все.Моя проблема была решена и больше я с ней не сталкивался.

Следует отметить, что метод, который вызывался на сборке C++, должен был записать несколько вещей в реестр.Я не занимался отладкой кода C++, чтобы выполнить какой-то RCA, но вижу возможность того, что все это не удалось, поскольку для записи реестра в операционной системе Windows 10 требуются административные привилегии.Итак, раньше, когда Visual Studio запускалась под учетной записью пользователя, не имевшей административных привилегий на компьютере, собственные вызовы не выполнялись.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top