Jak należy zdiagnozować błąd SEHException-zewnętrzny komponent wyrzucił wyjątek

Gdy użytkownik zgłosi błąd, taki jak

System.Runtime.InteropServices.SEHException - zewnętrzny komponent wyrzucił wyjątek?

Czy jest coś, co ja jako programista mogę zrobić, aby ustalić przyczynę?

Scenariusz: jeden użytkownik (korzystający z programu, który napisała moja firma) zgłosił ten błąd. To może, ale nie musi być jednorazowy błąd. Wspomnieli, że w ostatnim miesiącu komputer dwukrotnie "przestał działać". Nauczyłem się od doświadczenie, 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 byli w stanie podać mi więcej szczegółów i nie mogłem znaleźć żadnych zalogowanych błędów. Stąd może to być, ale nie musi być ten błąd.

Ze stack-trace, rzeczywisty błąd polegał na konstruowaniu klasy, która nie wywołuje bezpośrednio żadnego kodu interop, ale być może komplikuje to fakt, że obiekt może być częścią listy, która jest databoundem do DevExpress Grid.

Błąd został 'złapany' przez nieobsługiwaną procedurę wyjątku, która normalnie zamknie program, ale ma opcję ignorowania i kontynuowania. Jeśli zdecydowali się zignorować błąd, program kontynuował pracę, ale błąd wystąpił ponownie, gdy ta procedura była następnym uruchomieniem. Jednak nie wystąpił ponownie po zamknięciu i ponownym uruchomieniu naszej aplikacji.

Komputer, o którym mowa, nie wydawał się być zestresowany. Działa Vista Business, ma 2GB pamięci i według Task Manager używał tylko około połowy z tego z naszej aplikacji tylko około 200MB.

Jest jeszcze jedna informacja, która może, ale nie musi być istotna. Inna sekcja tego samego programu używa komponentu innej firmy, który jest wrapperem dotnet wokół natywnej biblioteki dll i ten komponent ma znany problem, w którym bardzo sporadycznie, dostajesz

Próba odczytu lub zapisu chronionej pamięci. Często wskazuje to na to, że inna pamięć jest corrupt

Twórcy komponentów twierdzą, że zostało to naprawione w najnowszej wersji ich komponentu, którego używamy wewnętrznie, ale nie zostało to jeszcze przekazane Klientowi.

Biorąc pod uwagę, że konsekwencje błędu są niskie (żadna praca nie jest stracona, a ponowne uruchomienie programu i powrót do miejsca, w którym były, zajmuje najwyżej minutę) i biorąc pod uwagę, że klient wkrótce otrzyma nową wersję( z zaktualizowanym komponentem strony trzeciej), mogę oczywiście przekroczyć mój limit palce i mam nadzieję, że błąd nie wystąpi ponownie.

Ale czy jest coś jeszcze, co mogę zrobić?

Author: Marcus Mangelsdorf, 2009-08-21

7 answers

Tak. Ten błąd jest strukturalnym wyjątkiem, który nie został zmapowany na błąd. NET. To pewnie Twoje mapowanie DataGrid rzuca natywny wyjątek, który był nieuwzględniony.

Możesz określić, jaki wyjątek występuje, patrząc na ExternalException.ErrorCode właściwość. Sprawdziłbym Twój ślad stosu i jeśli jest powiązany z siatką DevExpress, zgłoś im problem.

 26
Author: Reed Copsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-21 19:49:35

Miałem podobny problem z SEHException, który został wyrzucony, gdy mój program po raz pierwszy użył natywnego wrappera dll. Okazało się, że brakuje natywnego DLL dla tego wrappera. Wyjątek nie był w żaden sposób pomocny w rozwiązaniu tego problemu. To, co w końcu pomogło, to uruchamianie procmona w tle i sprawdzanie, czy nie było żadnych błędów podczas ładowania wszystkich niezbędnych bibliotek DLL.

 6
Author: Maurice Gilden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-11 08:45:03

Jeśli masz problem jak opisano w tym poście:

Asp.net mvc debugger throwing SEHException

Wtedy rozwiązaniem jest:

Jeśli masz jakąś aplikację od Trusteer (jak rapport lub cokolwiek) po prostu odinstaluj i uruchom ponownie system, będzie działać dobrze ... znalazłem to rozwiązanie tutaj:

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

 4
Author: Safran Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:53

Twórcy komponentów twierdzą, że zostało to naprawione w najnowszej wersji ich komponentów, których używamy wewnętrznie, ale zostało to jeszcze przekazane Klientowi.

Zapytaj producenta komponentów, jak sprawdzić, czy problem, który klient otrzymuje, jest problemem, który, jak mówią, naprawił w swojej najnowszej wersji, bez / przed wdrożeniem najnowszej wersji do klienta.

 3
Author: ChrisW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-21 19:49:58

Stare pytanie, ale dla googlerów: natknąłem się na ten błąd, gdy aplikacja znajduje się na udostępnieniu sieciowym, a urządzenie (laptop, tablet, ...) zostaje odłączony od sieci, gdy aplikacja jest w użyciu. W moim przypadku było to spowodowane tablet Surface wychodzący z zasięgu bezprzewodowego. Żadnych problemów po zainstalowaniu lepszego WAP.

 1
Author: Conrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-03 21:17:27

Kolejna informacja... Miałem ten problem dzisiaj na systemie Windows 2012 R2 x64 TS, w którym aplikacja została uruchomiona ze ścieżki unc / sieci. Problem wystąpił dla jednej aplikacji dla wszystkich użytkowników serwera terminali. Uruchomienie aplikacji lokalnie działało bez problemów. Po ponownym uruchomieniu, SEHException zaczął działać ponownie - rzucony przez SEHException Konstruktor INIT i TargetInvocationException

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-23 09:57:05

Moje konfiguracje maszyn:

SYSTEM OPERACYJNY: Windows 10 Wersja 1703 (x64)

Napotkałem ten błąd podczas debugowania mojego projektu C#. Net w Visual Studio 2017 Community edition. Wywołałem natywną metodę, wykonując P / invoke na złożeniu C++ załadowanym w czasie wykonywania. Napotkałem ten sam błąd zgłoszony przez OP.

Zdałem sobie sprawę, że Visual Studio zostało uruchomione z kontem użytkownika, który nie był administratorem na komputerze. Potem ponownie uruchomiłem Visual Studio pod innym kontem użytkownika, który był administratorem na komputerze. To wszystko. Mój problem został rozwiązany i nie spotkałem się z problemem ponownie.

Należy zauważyć, że metoda wywoływana w C++ assembly miała zapisywać kilka rzeczy w rejestrze. Nie poszedłem debugować kodu C++, aby zrobić trochę RCA, ale widzę możliwość, że cała sprawa nie powiodła się, ponieważ uprawnienia administracyjne są wymagane do napisania rejestru w systemie operacyjnym Windows 10. Więc wcześniej, gdy Visual Studio działało pod kontem użytkownika, który nie miał uprawnień administracyjnych na komputerze, a następnie natywne połączenia zawodziły.

 0
Author: RBT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-21 12:42:29