Krav: Når man udvikler applikationer med .NET/C#, er det umuligt for nogen udvikler at sikre stabil og robust udførelse af programmet, hvilket kan være relateret til udviklerens kodelogik eller brugerens kørende miljøDer er ingen 100% garanti for, at den applikation, du udvikler, vil være problemfriDet er ikke forfærdeligt at have et problem, men det forfærdelige er, at der er et problem, som ikke kan finde årsagen og løse det.
Hvis applikationen ikke bliver udført som forventet, og en unormal afslutning opstår, hvordan kan en DMP-dumpfil så automatisk genereres for at fejlfinde problemet?
En dump er en fil, der indeholder et snapshot af processen, da den blev oprettet, og kan bruges til at kontrollere applikationens tilstand. Når det er svært at tilknytte en debugger til en .NET-applikation, såsom et produktions- eller CI-miljø, kan du bruge dumps til at fejlfinde applikationen. Brug af dumps fanger tilstanden for problematiske processer, og tilstanden kan kontrolleres direkte uden at stoppe applikationen.
Saml lossepladser
Du kan bruge miljøvariabler til at konfigurere din applikation til at indsamle dumps i tilfælde af fejl. Det er nyttigt, hvis du vil vide årsagen til fejlen. For eksempel hjælper det at fange dumps, når en undtagelse kastes, med at identificere problemer ved at tjekke appens tilstand, hvis den fejler.
Følgende tabel viser de miljøvariabler, du kan bruge til at konfigurere din applikation til at indsamle dumps i tilfælde af fejl.
Miljøvariabel | illustrere | Standard | | COMPlus_DbgEnableMiniDump eller DOTNET_DbgEnableMiniDump | Hvis det er sat til 1, aktiver generering af core dump. | 0 | | COMPlus_DbgMiniDumpType eller DOTNET_DbgMiniDumpType | Den type dump, man skal hente. Se tabellen nedenfor for detaljer | 2 (MiniDumpWithPrivateReadWriteMemory) | | COMPlus_DbgMiniDumpName eller DOTNET_DbgMiniDumpName | Skriv filstien til dumpet. Sørg for, at brugeren, der kører dotnet-processen, har skriveadgang til den angivne mappe. | /tmp/coredump.<pid> | | COMPlus_CreateDumpDiagnostics eller DOTNET_CreateDumpDiagnostics | Hvis den er sat til 1, aktiver diagnostisk logging for dump-processen. | 0 | | COMPlus_EnableCrashReport eller DOTNET_EnableCrashReport | (Kræver .NET 6 eller nyere) Hvis den sættes til 1, genererer runtimen en JSON-formateret fejlrapport, der inkluderer information om tråde og stakrammer i den fejlslagne applikation. Nedbrudsrapportens navn er dumpstien/navnet, der er tilføjet til .crashreport.json. | | | COMPlus_CreateDumpVerboseDiagnostics eller DOTNET_CreateDumpVerboseDiagnostics | (Kræver .NET 7 eller nyere) Hvis sat til 1, aktiver detaljeret diagnostisk logning for dump-processen. | 0 | | COMPlus_CreateDumpLogToFile eller DOTNET_CreateDumpLogToFile | (.NET 7 eller senere krævet) Filstien til diagnosemeddelelsen skal skrives. Hvis den ikke er sat, skrives en diagnostisk meddelelse til konsollen for den fejlslagne applikation. | |
For disse miljøvariabler standardiserer .NET 7 præfikset DOTNET_ i stedet for COMPlus_. Dog vil præfikset COMPlus_ fortsat fungere korrekt. Hvis du erI tidligere versioner af .NET-runtime skulle miljøvariabler stadig bruge præfikset COMPlus_。
Opret en ny .NET Core 6-applikationstest
Brug VS 2022 til at teste en ny .NET Core 6-apptest med følgende kode:
Start programmet med cmd-kommandoen, som vist på billedet nedenfor:
COMPlus_EnableCrashReport=1 COMPlus_DbgEnableMiniDump=1 COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp" COMPlus_CreateDumpDiagnostics=1 Ubehandlet undtagelse. System.Undtagelse: itsvse.com på Program. <Main>$(String[] args) i C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:linje 9 [createdump] Skriver minidump med heap for at file C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp [createdump] Dump med succes skrevet
Du kan se, at efter programmet crasher unormalt, er det succesfuldt under den mappe, vi specificererDump-filen .dmp genereresHvordan man analyserer det, er en anden sag.
Windows Platform Universelle Indstillinger
I Windows kan Windows Fejlrapportering (WER) konfigureres til at generere dumps, når et program crasher.
Denne metode virker for alle programmer, ikke kun . .NET-programmer, såsom C++, Go osv.; Og og. NET. NET Core-versionen
- Åbn regedit.exe
- Åbn mappen HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Fejlrapportering\LocalDumps
- Opret en KEY DumpFolder af typen REG_EXPAND_SZ for at konfigurere mappen, hvor dumpfilerne gemmes
- Du kan også oprette en KEY DumpCount af typen REG_DWORD konfigurere det samlede antal dumps
Selvfølgelig kan du også konfigurere disse med PowerShell-kommandoer:
Ifølge ovenstående konfiguration vil programmet, hvis det afsluttes unormalt, oprette et programdump i mappen %LOCALAPPDATA%\CrashDumps.
Ressourcer:
Hyperlink-login er synlig.
Hyperlink-login er synlig.
Hyperlink-login er synlig.
|