Ogni volta che un utente segnala un errore come
System.Runtime.InteropServices.SEHException - Il componente esterno ha generato un'eccezione?
c'è qualcosa che io come programmatore posso fare per determinare la causa?
Scenario: un utente (utilizzando un programma scritto dalla mia azienda) ha segnalato questo errore. Questo può o non può essere stato un errore una tantum. Hanno detto che nell'ultimo mese il computer ha "smesso di funzionare" due volte. Ho imparato per esperienza a non prendere questa descrizione troppo alla lettera, poiché di solito significa che qualcuno che si relaziona con il computer non funziona come previsto. Non sono stati in grado di fornirmi ulteriori dettagli e non sono riuscito a trovare alcun errore registrato. Quindi può o non può essere stato questo errore.
Dallo stack-trace, l'errore effettivo si è verificato durante la costruzione di una classe che non chiama direttamente alcun codice di interoperabilità, ma forse complicato dal fatto che l'oggetto può far parte di un elenco associato a un database DevExpress Grid.
L'errore è stato "rilevato" da una routine di eccezione non gestita che normalmente chiuderà il programma, ma ha un'opzione per ignorare e continuare. Se hanno scelto di ignorare l'errore, il programma ha continuato a funzionare ma l'errore si è verificato nuovamente quando è stata eseguita la routine successiva. Tuttavia non si è verificato di nuovo dopo aver chiuso e riavviato la nostra applicazione.
Il computer in questione non sembrava essere stressato. Funziona con Vista Business, ha 2 GB di memoria e, secondo Task Manager, ne utilizzava solo circa la metà con la nostra applicazione, circa 200 Mb.
C'è un'altra informazione che può o non può essere rilevante. Un'altra sezione dello stesso programma utilizza un componente di terze parti che è effettivamente un wrapper dotnet attorno a una dll nativa e questo componente ha un problema noto in cui molto occasionalmente si ottiene un
Tentativo di leggere o scrivere la memoria protetta. Questo è spesso un'indicazione che altra memoria è danneggiata
I produttori di componenti affermano che questo problema è stato risolto nell'ultima versione del loro componente che stiamo utilizzando internamente, ma questo non è stato ancora fornito al cliente.
Dato che le conseguenze dell'errore sono basse (nessun lavoro viene perso e riavviare il programma e tornare dove si trovava richiede solo un minuto al massimo) e dato che il cliente riceverà a breve una nuova versione (con la terza aggiornata- componente del partito), posso ovviamente incrociare le dita e sperare che l'errore non si ripeta.
Ma c'è qualcos'altro che posso fare?