Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 5902|Svar: 1

[.NET Core] [Egentlig kamp]. NET/C#-applikationen crasher, og undtagelser genererer automatisk DMP-dumpfiler

[Kopier link]
Opslået den 6-11-2022 kl. 22:41:42 | | | |
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_DbgEnableMiniDumpHvis det er sat til 1, aktiver generering af core dump.0
COMPlus_DbgMiniDumpType eller DOTNET_DbgMiniDumpTypeDen type dump, man skal hente. Se tabellen nedenfor for detaljer2 (MiniDumpWithPrivateReadWriteMemory)
COMPlus_DbgMiniDumpName eller DOTNET_DbgMiniDumpNameSkriv 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_CreateDumpDiagnosticsHvis 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.




Tidligere:Detaljeret forklaring af lagringsreglerne for Discuz-vedhæftede billeder, avatarbilleder og albumbilleder
Næste:Praktisk drift: Brug BundleTransformer til at erstatte System.Web.Optimization
 Udlejer| Opslået den 6-11-2022 22:44:06 |
Send dumpfiler:

Efter programmet starter, skal du afgøre, om mappen har en genereret dumpfil, hvis ja, indsend filen til det angivne interface og slet derefter filen.
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com