2009-08-21 3 views
64

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

System.Runtime.InteropServices.SEHException - Внешний компонент бросил исключение?

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

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

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

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

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

Существует еще одна информация, которая может быть или не быть релевантной. Другая часть той же программы использует компонент третьей стороны, которая фактически является DotNet обертка вокруг родной DLL и этот компонент не имеет известную проблему, где очень редко, вы получите

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

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

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

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

ответ

26

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

Вы можете указать, что такое исключение, если посмотреть на объект ExternalException.ErrorCode. Я бы проверил трассировку стека, и если она привязана к сетке DevExpress, сообщите о проблеме им.

+0

StackTrace не упоминает DevExpress нигде, а просто мой класс.Вам нужно будет проверить, что такое ErrorCode. – sgmoore

+0

В этом случае попытайтесь выяснить, что именно забросило сообщение об ошибке. –

3

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

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

4

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

asp.net mvc debugger throwing SEHException

то решение:

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

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

6

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

0

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

0

Просто еще одна информация ... Была ли эта проблема сегодня в системе Windows R2 R2 x64, где приложение было запущено с сетевого/сетевого пути. Проблема возникла для одного приложения для всех пользователей терминальных серверов. Выполнение приложения локально работало без проблем. После перезагрузки он начал работать снова - SEHException в брошенную был Constructor Init и TargetInvocationException

0

Мои конфигурации машины:

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

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

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

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

Смежные вопросы