Siempre que un usuario informe un error como
System.Runtime.InteropServices.SEHException - ¿El componente externo ha generado una excepción?
¿Hay algo que yo, como programador, pueda hacer para determinar la causa?
Escenario: un usuario (que utiliza un programa escrito por mi empresa) ha informado de este error. Esto puede o no haber sido un error único. Mencionaron que en el último mes, la computadora ha 'dejado de funcionar' dos veces. He aprendido por experiencia, no tomar esta descripción demasiado literalmente, ya que generalmente significa que alguien relacionado con la computadora no está funcionando como se esperaba. No pudieron darme más detalles y no pude encontrar ningún error registrado. Por lo tanto, puede que haya sido este error o no.
Desde el seguimiento de la pila, el error real fue al construir una clase que no llama directamente a ningún código de interoperabilidad, pero quizás complicado por el hecho de que el objeto puede ser parte de una lista que está vinculada a datos en una cuadrícula DevExpress.
El error fue "detectado" por una rutina de excepción no controlada que normalmente cerrará el programa, pero tiene una opción para ignorar y continuar. Si optaron por ignorar el error, el programa continuó funcionando, pero el error volvió a ocurrir la próxima vez que se ejecutara esta rutina. Sin embargo, no volvió a ocurrir después de cerrar y reiniciar nuestra aplicación.
La computadora en cuestión no parecía estar estresada. Está ejecutando Vista Business, tiene 2 GB de memoria y, según el Administrador de tareas, solo estaba usando aproximadamente la mitad de eso con nuestra aplicación, aproximadamente 200 Mb.
Hay otra información que puede ser relevante o no. Otra sección del mismo programa utiliza un componente de terceros que es efectivamente un envoltorio dotnet alrededor de una dll nativa y este componente tiene un problema conocido en el que muy ocasionalmente, obtienes un
Intento de leer o escribir en la memoria protegida. Esto suele ser 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 usando internamente, pero aún no se ha entregado al cliente.
Dado que las consecuencias del error son bajas (no se pierde ningún trabajo y reiniciar el programa y volver a donde estaban solo toma un minuto como máximo) y dado que el cliente en breve estará obteniendo una nueva versión (con la tercera versión actualizada). party), obviamente puedo cruzar los dedos y esperar que el error no vuelva a ocurrir.
¿Pero hay algo más que pueda hacer?