2013-02-19 6 views
9

Mój program Delphi działa jako usługa NT i został uruchomiony grzywny przez ponad 2 miesiące, a następnie zatrzymuje się nagle i generuje zrzut awaryjny:Co mam zrobić, gdy mój program ulega awarii z wyjątkiem 0xc0000005 pod adresem 0?

Błąd nazwę aplikacji: tca_shctisvc_ip.exe, Wersja: 7.1.0.1843 , datownik: 0x2a425e19 Błąd Nazwa modułu: nieznana wersja: 0.0.0.0, sygnatura czasowa: 0x00000000 Kod wyjątku: 0xc0000005 przesunięcie błędu: 0x00000000

Nie było prawdziwe adresy do pracy w oparciu o informacje w przypadku systemu Windows log. Byłem w stanie załadować mini zrzut do WinDbg i powiedział, że był wyjątek, ale znalazł problemy z ramkami stosu. Inne narzędzie (Viewminidump) było w stanie pokazać mi stosy działających wątków.

Gdzie mogę zacząć rozwiązywać ten problem?

Odpowiedz

24

Kod wyjątku 0xc0000005 jest naruszeniem prawa dostępu. Wartość AV przy korekcji błędu 0x00000000 oznacza, że ​​coś w kodzie usługi ma dostęp do wskaźnika nil. Będziesz po prostu musiał debugować usługę podczas działania, aby dowiedzieć się, do czego służy. Jeśli nie możesz uruchomić go w debugerze, zainstaluj trzecią platformę obsługi wyjątków, taką jak EurekaLog lub MadExcept, aby dowiedzieć się, co robiła twoja usługa w czasie AV.

+5

+1 za sugerowanie rejestratora wyjątków. To jest najbardziej przydatne narzędzie do debugowania, które znalazłem poza samym debuggerem. –

0

Problemy z ramkami stosu mogą wskazywać na uszkodzenie stosu (naprawdę okropne bestie), optymalizację lub mieszanie struktur, takich jak C/C++/C#/Delphi i inne szaleństwa jako takie - nie ma absolutnego standardu w odniesieniu do ramek stosu . (Niektóre języki nawet ich nie mają!).

Proponuję więc nieco zirytować problemy z ramkami stosu, ignorując je, a następnie użyć odpowiedzi Remy'ego.

0

I był już ten sam problem z innej aplikacji,

Faulting application name: javaw.exe, version: 8.0.51.16, time stamp: 0x55763d32 
Faulting module name: mscorwks.dll, version: 2.0.50727.5485, time stamp: 0x53a11d6c 
Exception code: 0xc0000005 
Fault offset: 0x0000000000501090 
Faulting process id: 0x2960 
Faulting application start time: 0x01d0c39a93c695f2 
Faulting application path: C:\Program Files\Java\jre1.8.0_51\bin\javaw.exe 
Faulting module path:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll 

używałem Toolkit Enhanced Mitigation Experience (Emet) firmy Microsoft i znalazłem wyłączając Emet funkcje na javaw.exe w moim przypadku, ponieważ była to aplikacja powodująca błąd, umożliwiła ona pomyślne uruchomienie aplikacji. Upewnij się, że nie masz podobnego oprogramowania z zabezpieczeniami pamięci.

+0

Wygląda na to, że Oracle użył Delphi do zbudowania środowiska Java SE 8 JRE;) – mjn

Powiązane problemy