5

Występuje APPCRASH z mojej aplikacji C#. Środowisko wykonawcze wyświetla komunikat o błędzie "Ta aplikacja zażądała, aby środowisko wykonawcze zakończyło ją w nietypowy sposób". Następnie, po kliknięciu OK, pojawia się komunikat "Moja aplikacja przestała działać" z opcjami "sprawdź online dla rozwiązania", "zamknij program" i "debuguj program". Kiedy klikam "dodatkowe szczegóły", otrzymuję podpis APPCRASH z mnóstwem dodatkowych informacji. Niektóre z nich są czytelne dla człowieka, niektóre z nich to tylko liczby szesnastkowe. "Kod wyjątku" to 40000015. Istnieją również wiersze "Informacje dodatkowe". Moje pytanie brzmi: czy ktokolwiek we wszechświecie wie, co oznaczają informacje w komunikacie APPCRASH?Co oznaczają dane wiadomości APPCRASH?

Wygląda na to, że wiadomość miała być odczytana przez kogoś, kto może odgadnąć przyczynę. Szukając odpowiedzi, znalazłem wiele osób publikujących wiadomości sformatowane dokładnie tak samo. Niestety, nie znalazłem żadnych wyjaśnień na temat tego, co ta informacja oznacza.

Próbowałem także opcji "Debug Program", ale nie jest to pomocne. Po prostu umieszcza mnie w bibliotekach systemowych bez żadnego kodu w dowolnym miejscu na stosie wywołań. Sprawdziłem i błąd nie występuje w tym kodzie systemowym.

Komunikat APPCRASH nazwał inną bibliotekę DLL jako "moduł usterki" (ten kod używa wielu zewnętrznych bibliotek dll) i prawdopodobnie wystąpił tam błąd krytyczny. Ale ta informacja nie jest bardzo pomocna, ponieważ muszę znaleźć miejsce w moim kodzie, które powoduje złe wywołanie zewnętrznej biblioteki DLL (lub stawia ją w złym stanie). Niestety, kiedy mówię "mój kod", mam na myśli kod, nad którym pracuję. Jest to ogromna baza kodu napisana przez kilkadziesiąt osób w ciągu kilku lat, więc nie mogę po prostu zgadnąć miejsc, które mogą spowodować fatalne połączenie. Właśnie dlatego miałem nadzieję uzyskać więcej informacji z komunikatu APPCRASH. Właśnie dlatego jestem bardzo skąpy w szczegółach. Całość jest bardzo zastrzeżona z dużą ilością biurokracji. Właśnie dlatego nie opublikowałem treści wiadomości APPCRASH.

Dla jasności, nie proszę o zbadanie mojego problemu dla mnie. Nie mam możliwości przedstawienia powtarzalnego przypadku błędu i nie proszę nikogo, aby opowiedział mi przyczynę błędu w moim konkretnym przypadku. Po prostu chcę wiedzieć, jak interpretować te liczby szesnastkowe i nie udało mi się znaleźć żadnej dokumentacji.

+0

To kod wyjątku, który jest używany, gdy natywny kod C lub C++ wywołuje funkcję abort(). Nie możemy pomóc ci go znaleźć, ale wyraźnie znajduje się on w "bibliotekach systemowych", w których się zagubiłeś. –

+0

Ten wyjątek nie występuje w kodzie systemowym, który wprowadził mnie debugger; ale prawdopodobnie istnieje wyjątek w innej zewnętrznej bibliotece dll. Jeśli pochodzi z abort(), to umiera gdzieś w niezarządzanej krainie. – user1646801

+1

Wygląda na to, że masz problemy z niezarządzanym kodem. Aby wyizolować problem, spróbowałbym sprawdzić [DllImport] w twoim kodzie i spróbować udawać, komentować to i widzieć, czy masz mniej problemów. Innym pomysłem jest, jeśli masz komponenty innych firm, które mogą mieć złe niezarządzane połączenia. Ostatni, spróbuj WinDBG i poszukaj problemu. WinDBG będzie moim ostatnim zasobem, ponieważ nie jestem specjalistą i jest to bardzo trudny sposób debugowania. –

Odpowiedz

1

Oznacza to, że masz nieprzechwycony nieobsługiwany wyjątek i awarię aplikacji.

Jeśli działa w trybie debugowania, należy sprawdzić, co różni się wersją wydania. Czy wszystkie biblioteki są obecne? Czy masz konfigurację app.config?

Sprawdź swoją przeglądarkę zdarzeń w obszarze Dzienniki systemu Windows -> Aplikacja, aby uzyskać więcej informacji.

Jeśli skonfigurujesz procedurę obsługi wyjątku, uzyskasz znacznie lepsze informacje, takie jak ślad stosu.

+0

Cześć, dziękuję za odpowiedź. Niestety, wypróbowałem wszystkie zwykłe sztuczki i nie dotarłem zbyt daleko. Obecnie działa w trybie debugowania i zrywa. Mam zestaw debuggera, aby złamać nieobsługiwane wyjątki i nie przechwytuje żadnego. Informacje w przeglądarce zdarzeń nie są bardziej szczegółowe niż komunikat Appcrash. – user1646801

+0

@dmck - istnieje kilka wyjątków złych tyłek (takich jak wyjątki StackOverflowException lub OutOfMemory), które powodują uszkodzenie stanu AppDomain, wyjątki te nie mogą być rejestrowane/buforowane, gdy występują w rzeczywistości –

0

Musisz wygenerować crashdump, który może być analizowany po fakcie. Będziesz musiał wprowadzić pewne zmiany w rejestrze, a następnie przeanalizować plik zrzutu za pomocą programu Visual Studio. Mam nadzieję, że da ci więcej wskazówek, takich jak określona funkcja, która się nie udaje.

Zobacz szczegóły tej strony: http://blog.functionalfun.net/2013/05/how-to-debug-silent-crashes-in-net.html

Będziesz powołującą DebugDiag, narzędzie firmy Microsoft.

Daj mi znać, jak sprawy się potoczą lub jeśli znajdziesz lepsze narzędzia.

Pozdrawiam,

Dave

8

Oto przykład wiadomości app katastrofy:

Problem signature: 
Problem Event Name: APPCRASH 
Application Name: WINWORD.EXE 
Application Version: 12.0.4518.1014 
Application Timestamp: 45428028 
Fault Module Name: StackHash_7ae5 
Fault Module Version: 6.0.6000.16386 
Fault Module Timestamp: 4549bdc9 
Exception Code: c0000374 
Exception Offset: 000af1c9 
OS Version: 6.0.6000.2.0.0.256.4 
Locale ID: 1033 
Additional Information 1: 7ae5 
Additional Information 2: 4cf2e59e469447e0692da79a5a9446de 
Additional Information 3: 333f 
Additional Information 4: 583336399425ab3efc33bdfbb60895ee 

Nazwa aplikacji i wersja aplikacji są proste, jak to jest w datownik (jest zmieniona data w Eksploratorze plików zakodowanym jako 32-bitowa wartość datownika Unix). Moduł błędów to zwykle nazwa dll, a przesunięcie wyjątku to adres przesunięcia instrukcji sprzętowej w bibliotece DLL, która spowodowała błąd. W tym przypadku był to wewnętrzny błąd środowiska wykonawczego, w którym nie można było pobrać poprawnego modułu, więc zamiast wartości rzeczywistej otrzymaliśmy StackHash. Wersje są normalnymi ciągami wersji PE plików wykonywalnych w systemie Windows. Identyfikator ustawień narodowych to używany bank ustawień globalizacji: 1033 to en-US.

Kod wyjątku można interpretować here. W tym przykładzie błąd był STATUS_HEAP_CORRUPTION.

dodatkowe pola informacyjne są dane kryjące, a na podstawie tego, co kod Wyjątkiem był. Nie znam żadnych użytecznych informacji na tych polach, prawdopodobnie ich nie ma i prawdopodobnie te pola są celowo nieudokumentowane, aby firma Microsoft mogła je zmienić w razie potrzeby. Te pola są zwykle hashami md5 wielu informacji ... jest to w zasadzie tak, że wiele informacji można porównać do tego samego/różnych szybko poprzez kod skrótu, więc wiesz, czy błąd wynika z tego samego stanu wykonania, co inny .

0

Jest miły cechą .NET Managed Asystenci debugger rozwiązywać rodzimych i zarządzanych interoperations kodu MSDN article about using it here

wyjątki rzucane przez MDA może być skonfigurowany w języku Visual wyjątkami Studio Widok okna.