Wymagania: Podczas tworzenia aplikacji z użyciem .NET/C# żaden programista nie jest w stanie zapewnić stabilnego i solidnego wykonania programu, co może być związane z logiką kodu programisty lub środowiskiem użytkownikaNie ma 100% gwarancji, że aplikacja, którą tworzysz, będzie bezproblemowaNie jest źle mieć problem, ale najgorsze jest to, że istnieje problem, który nie potrafi znaleźć przyczyny i rozwiązać problemu.
Jeśli aplikacja nie zostanie wykonana zgodnie z oczekiwaniami i wystąpi nieprawidłowe wyjście, jak można automatycznie wygenerować plik zrzutu DMP, aby rozwiązać problem?
Zrzut to plik zawierający migawkę procesu w momencie jego utworzenia i może być używany do sprawdzania stanu aplikacji. Gdy trudno jest dołączyć debugger do aplikacji .NET, takiej jak środowisko produkcyjne lub CI, możesz użyć zrzutów do debugowania aplikacji. Użycie zrzutów rejestruje stan problematycznych procesów, a stan ten można sprawdzić bezpośrednio bez zatrzymywania aplikacji.
Zbieraj wyrzuty
Możesz użyć zmiennych środowiskowych do skonfigurowania aplikacji do zbierania zrzutów w przypadku awarii. To pomocne, jeśli chcesz poznać przyczynę awarii. Na przykład przechwytywanie zrzutów po wyrzuceniu wyjątku pomaga zidentyfikować problemy, sprawdzając stan aplikacji, jeśli się nie uda.
Poniższa tabela pokazuje zmienne środowiskowe, których możesz użyć do skonfigurowania aplikacji do zbierania zrzutów w przypadku awarii.
zmienna środowiskowa | Ilustrują | Domyślny | | COMPlus_DbgEnableMiniDump czy DOTNET_DbgEnableMiniDump | Jeśli ustawisz 1, włącz generowanie zrzutu rdzeni. | 0 | | COMPlus_DbgMiniDumpType czy DOTNET_DbgMiniDumpType | Taki rodzaj wysypiska do zbierania. Zobacz poniższą tabelę dla szczegółów | 2 (MiniZPrywatnąZapisPamięciąCzytaniaZapisu) | | COMPlus_DbgMiniDumpName czy DOTNET_DbgMiniDumpName | Zapisz ścieżkę pliku do zrzutu. Upewnij się, że użytkownik prowadzący proces dotnet ma dostęp do określonego katalogu. | /tmp/coredump.<pid> | | COMPlus_CreateDumpDiagnostics czy DOTNET_CreateDumpDiagnostics | Jeśli ustawiono 1, włącz logowanie diagnostyczne dla procesu zrzutu. | 0 | | COMPlus_EnableCrashReport czy DOTNET_EnableCrashReport | (Wymaga .NET 6 lub nowszych) Jeśli ustawione na 1, runtime generuje raport o awarii w formacie JSON, który zawiera informacje o wątkach i ramkach stosu uszkodzonej aplikacji. Nazwa raportu crash to ścieżka/nazwa zrzutu przypisana do .crashreport.json. | | | COMPlus_CreateDumpVerboseDiagnostics czy DOTNET_CreateDumpVerboseDiagnostics | (Wymaga .NET 7 lub nowszego) Jeśli ustawiono na 1, włącz szczegółowe logowanie diagnostyczne dla procesu zrzutu. | 0 | | COMPlus_CreateDumpLogToFile czy DOTNET_CreateDumpLogToFile | (wymagany .NET 7 lub nowszy) Ścieżka pliku do wiadomości diagnostycznej powinna być zapisana. Jeśli nie jest ustawiony, do konsoli nieudanej aplikacji zapisywany jest komunikat diagnostyczny. | |
Dla tych zmiennych środowiskowych .NET 7 standaryzuje prefiks DOTNET_ zamiast COMPlus_. Jednak prefiks COMPlus_ będzie nadal działać poprawnie. Jeśli jesteśWe wcześniejszych wersjach środowiska .NET zmienne środowiskowe powinny nadal używać prefiksu COMPlus_。
Stwórz nowy test aplikacji .NET Core 6
Użyj VS 2022, aby przetestować nowy test aplikacji .NET Core 6 z następującym kodem:
Uruchom program za pomocą polecenia cmd, jak pokazano na poniższym obrazku:
COMPlus_EnableCrashReport=1 COMPlus_DbgEnableMiniDump=1 COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp" COMPlus_CreateDumpDiagnostics=1 Wyjątek nieobsługiwany. System.Wyjątek: itsvse.com w Programie. <Main>$(String[] args) w C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:linia 9 [createdump] Zapisywanie minidumpu z kopicą do pliku C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp [createdump] Dump pomyślnie napisany
Widać, że po nieprawidłowym zawieszeniu programu jest on pomyślnie umieszczony w katalogu, który wskazaliśmyPlik zrzutu .dmp jest generowanyJeśli chodzi o sposób analizy, to inna sprawa.
Uniwersalne Ustawienia Windows Platform
W systemie Windows raportowanie błędów Windows (WER) może być skonfigurowane do generowania zrzutów podczas awarii aplikacji.
Ta metoda działa dla wszystkich programów, nie tylko dla . programy .NET, takie jak C++, Go itp.; I i. SIEĆ. Wersja NET Core
- Otwórz regedit.exe
- Otwórz katalog HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
- Utwórz folder KEY DumpFolder typu REG_EXPAND_SZ, aby skonfigurować katalog, w którym przechowywane są pliki zrzutu
- Możesz też utworzyć KEY DumpCount typu REG_DWORD skonfigurować całkowitą liczbę zrzutów
Oczywiście możesz też skonfigurować je za pomocą poleceń PowerShell:
Zgodnie z powyższą konfiguracją, jeśli program wyłączy się nieprawidłowo, utworzy zrzut programu w katalogu %LOCALAPPDATA%\CrashDumps.
Zasoby:
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
|