¿Cómo se debe diagnosticar el error SEHException - componente externo ha iniciado una excepción

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

Pregunta

Siempre que un usuario informa de un error tal como

  

System.Runtime.InteropServices.SEHException -? Componente externo ha iniciado una excepción

¿hay algo que yo, como un programador puede hacer para determinar la causa?

Escenario: Un usuario (utilizando un programa de mi compañía escribió) ha informado de este error. Esto puede o no puede haber sido un fuera de error. Mencionaron que en el último mes, el equipo tiene el doble 'dejado de funcionar'. He aprendido de la experiencia, no tomar demasiado literalmente esta descripción, ya que por lo general significa que alguien relacionado con el equipo no está funcionando como se esperaba. No fueron capaces de darme más detalles y no pude encontrar ningún error registrado. Por lo tanto, puede o no haber sido este error.

A partir de la pila-trace, el error real era la hora de construir una clase que no llame directamente cualquier código de interoperabilidad, pero tal vez complicado por el hecho de que el objeto puede ser parte de una lista que se DataBound a un DevExpress cuadrícula.

El error fue 'atrapado' por una rutina de excepción no controlada que normalmente cerrará el programa, pero tiene una opción para ignorar y continuar. Si se optó por ignorar el error, entonces el programa continuó trabajando pero el error se produjo cuando vuelva a esta rutina era próxima ejecución. Sin embargo, no se produjo de nuevo después de cerrar y reiniciar nuestra aplicación.

El equipo en cuestión no parecía estar estresado. Se está ejecutando Vista Business, tiene 2 GB de memoria y de acuerdo con el Administrador de tareas sólo se utilizaba la mitad de eso con nuestra aplicación sólo de 200 Mb.

Hay otra pieza de información que pueden o no ser relevante. Otra sección del mismo programa utiliza un componente de terceros que es efectivamente una envoltura alrededor de un dotnet DLL nativo y este componente tiene un problema conocido en el muy de vez en cuando, se obtiene un

  

Intento de leer o escribir en la memoria protegida. Esto es a menudo una indicación de que otra memoria está dañada

Los fabricantes de componentes dicen que esto se ha solucionado en la última versión de su componente que estamos utilizando en la casa, pero esto no se ha dado al cliente todavía.

Dado que las consecuencias del error son bajos (sin trabajo se pierde y reiniciar el programa y volver a donde estaban sólo toma un minuto como máximo) y dado que el cliente en breve va a obtener una nueva versión (con la componente de terceros actualizado), que, obviamente, puede cruzar los dedos y esperar que el error no vuelva a ocurrir.

Pero ¿hay algo más que pueda hacer?

¿Fue útil?

Solución

Sí. Este error es una excepción estructurada que no fue mapeado en un error de .NET. Es probablemente el mapeo DataGrid lanzar una excepción nativa que fue capturada.

Se puede decir lo que está ocurriendo excepción mirando el propiedad ExternalException.ErrorCode . Me echa el seguimiento de la pila, y si está ligado a la red DevExpress, informe del problema a ellos.

Otros consejos

He tenido un problema similar con un SEHException que se produce cuando mi programa utilizado por primera vez una envoltura DLL nativa. Resultó que la DLL nativo para que la envoltura no estaba. La excepción fue de ninguna manera útil para resolver esto. ¿Qué le ayuda en el extremo corría procmon en el fondo y comprobar si se han producido errores al cargar todas las DLL necesarias.

si va a ser un problema como se describe en este post:

asp.net mvc depurador tirar SEHException

entonces la solución es:

Si usted tiene cualquier aplicación desde Trusteer (como relación o cualquier cosa) acaba de desinstalar y reiniciar el sistema, que va a funcionar bien ... encontrado esta solución aquí:

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

  

Los fabricantes de componentes dicen que esto se ha solucionado en la última versión de su componente que estamos utilizando en la casa, pero esto se ha dado al cliente todavía.

Preguntar al fabricante de componentes de cómo probar si el problema de que el cliente está recibiendo el problema es que dicen que han fijado en su última versión, sin / antes de desplegar su última versión para el cliente.

Me he encontrado con este error cuando la aplicación reside en un recurso compartido de red, y el dispositivo (ordenador portátil, tableta, ...) se desconecta de la red mientras la aplicación está en uso. En mi caso, se debió a una tableta Surface salir del alcance inalámbrico. No hay problemas después de la instalación de una mejor WAP.

Sólo otra información ... Tenido ese problema hoy en día en un sistema R2 x 64 TS de Windows 2012, donde se inició la aplicación de una ruta UNC / red. El problema se produjo por una aplicación para todos los usuarios del servidor de terminales. La ejecución de la aplicación localmente trabajado sin problemas. Después de un reinicio que empezó a funcionar de nuevo - de que había sido arrojado Constructor init y TargetInvocationException

el SEHException

Mis configuraciones de la máquina:

Sistema operativo: Windows 10 Versión 1703 (x64)

Me enfrenté a este error durante la depuración mi proyecto .Net C # en Visual Studio 2017 edición de la comunidad. Estaba llamando un método nativo mediante la realización de p / Invoke en un C ++ ensamblado cargado en tiempo de ejecución. Me encontré con el mismo error comunicado por la OP.

Me di cuenta de que Visual Studio se puso en marcha con una cuenta de usuario que no era un administrador en la máquina. Entonces relancé Visual Studio bajo una cuenta de usuario diferente que era un administrador en la máquina. Eso es todo. Mi problema se resolvió y que no dan a la cuestión de nuevo.

Una cosa a tener en cuenta es que el método que se invoca en el conjunto C ++ se supone que escribir algunas cosas en el registro. No fui a depurar el código C ++ para hacer un poco de RCA pero veo una posibilidad de que todo estaba fallando ya que se requieren privilegios administrativos para escribir en el registro de sistema operativo Windows 10. Así que antes, cuando Visual Studio se ejecuta en una cuenta de usuario que no tiene privilegios administrativos en la máquina, entonces las llamadas nativas estaban fallando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top