Zawsze, gdy użytkownik zgłosi błąd, taki jak
System.Runtime.InteropServices.SEHException - Składnik zewnętrzny zgłosił wyjątek?
czy jest coś, co ja jako programista mogę zrobić, aby ustalić przyczynę?
Scenariusz: jeden użytkownik (korzystający z programu napisanego przez moją firmę) zgłosił ten błąd. To mógł być jednorazowy błąd lub nie. Wspomnieli, że w ostatnim miesiącu komputer dwukrotnie „przestał działać”. Nauczyłem się z doświadczenia, aby nie brać tego opisu zbyt dosłownie, ponieważ zwykle oznacza to, że ktoś związany z komputerem nie działa zgodnie z oczekiwaniami. Nie mogli podać mi więcej szczegółów i nie mogłem znaleźć żadnych zarejestrowanych błędów. Dlatego mógł to być ten błąd lub nie.
Ze śledzenia stosu, rzeczywisty błąd wystąpił podczas konstruowania klasy, która nie wywołuje bezpośrednio żadnego kodu międzyoperacyjnego, ale może być skomplikowana przez fakt, że obiekt może być częścią listy, która jest powiązana z siecią DevExpress.
Błąd został „przechwycony” przez nieobsługiwaną procedurę wyjątku, która normalnie zamyka program, ale ma opcję zignorowania i kontynuowania. Jeśli zdecydowali się zignorować błąd, program nadal działał, ale błąd wystąpił ponownie po kolejnym uruchomieniu tej procedury. Jednak nie wystąpiło to ponownie po zamknięciu i ponownym uruchomieniu naszej aplikacji.
Omawiany komputer nie wydawał się zestresowany. Działa na systemie Vista Business, ma 2 GB pamięci i według Menedżera zadań zużywał tylko połowę tego z naszą aplikacją, czyli około 200 MB.
Jest jeszcze jedna informacja, która może być istotna lub nie. Inna sekcja tego samego programu wykorzystuje składnik innej firmy, który jest efektywnie opakowaniem dotnet wokół natywnej biblioteki dll i ten składnik ma znany problem, w którym bardzo rzadko pojawia się
Próbowano odczytać lub zapisać chronioną pamięć. Często wskazuje to na uszkodzenie innej pamięci
Twórcy komponentów twierdzą, że zostało to naprawione w najnowszej wersji ich komponentu, którego używamy na miejscu, ale nie zostało to jeszcze przekazane klientowi.
Biorąc pod uwagę, że konsekwencje błędu są niewielkie (żadna praca nie zostanie utracona, a ponowne uruchomienie programu i powrót do miejsca, w którym się znajdowały, zajmuje najwyżej minutę) oraz że klient wkrótce otrzyma nową wersję (ze zaktualizowaną trzecią party), oczywiście trzymam kciuki i mam nadzieję, że błąd się nie powtórzy.
Ale czy jest coś więcej, co mogę zrobić?