Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 5902|Svar: 1

[.NET Core] [Verklig strid]. NET/C#-applikationer kraschar och undantag genererar automatiskt DMP-dumpfiler

[Kopiera länk]
Publicerad den 6 november 2022 22:41:42 | | | |
Krav: När man utvecklar applikationer med .NET/C# är det omöjligt för någon utvecklare att säkerställa stabil och robust körning av programmet, vilket kan vara relaterat till utvecklarens kodlogik eller användarens körmiljöDet finns ingen 100% garanti för att applikationen du utvecklar kommer att vara problemfriDet är inte hemskt att ha ett problem, men det hemska är att det finns ett problem som inte kan hitta orsaken och lösa det.

Om applikationen inte körs som förväntat och en onormal avslutning inträffar, hur kan då en DMP-dumpfil automatiskt genereras för att felsöka problemet?
En dump är en fil som innehåller en ögonblicksbild av processen när den skapades och kan användas för att kontrollera applikationens tillstånd. När det är svårt att koppla en felsökare till en .NET-applikation, som en produktions- eller CI-miljö, kan du använda dumps för att felsöka applikationen. Att använda dumps fångar tillståndet för problematiska processer, och tillståndet kan kontrolleras direkt utan att applikationen stoppas.

Samla dumps

Du kan använda miljövariabler för att konfigurera din applikation att samla in dumps vid ett fel. Detta är hjälpsamt om du vill veta orsaken till felet. Till exempel hjälper det att fånga dumpar när ett undantag kastas för att identifiera problem genom att kontrollera appens status om den misslyckas.

Följande tabell visar miljövariabler som du kan använda för att konfigurera din applikation att samla in dumps vid ett fel.

Miljövariabel
illustrera
Standard
COMPlus_DbgEnableMiniDump eller DOTNET_DbgEnableMiniDumpOm den är inställd på 1, aktivera generering av core dump.0
COMPlus_DbgMiniDumpType eller DOTNET_DbgMiniDumpTypeTypen av dumpning att hämta. Se tabellen nedan för detaljer2 (MiniDumpWithPrivateReadWriteMemory)
COMPlus_DbgMiniDumpName eller DOTNET_DbgMiniDumpNameSkriv filvägen till dumpen. Säkerställ att användaren som kör dotnet-processen har skrivbehörighet till den angivna katalogen./tmp/coredump.<pid>
COMPlus_CreateDumpDiagnostics eller DOTNET_CreateDumpDiagnosticsOm det är satt till 1, aktivera diagnostikloggning för dumpprocessen.0
COMPlus_EnableCrashReport eller DOTNET_EnableCrashReport(Kräver .NET 6 eller senare) Om den sätts till 1 genererar körtiden en JSON-formaterad felrapport som inkluderar information om trådarna och stackramarna för den misslyckade applikationen. Kraschrapportens namn är dumpningsvägen/namnet som lagts till .crashreport.json.
COMPlus_CreateDumpVerboseDiagnostics eller DOTNET_CreateDumpVerboseDiagnostics(Kräver .NET 7 eller senare) Om det är satt till 1, aktivera detaljerad diagnostisk loggning för dumpprocessen.0
COMPlus_CreateDumpLogToFile eller DOTNET_CreateDumpLogToFile(.NET 7 eller senare krävs) Filvägen till diagnostikmeddelandet bör skrivas. Om det inte är inställt skrivs ett diagnostiskt meddelande till konsolen för den misslyckade applikationen.

För dessa miljövariabler standardiserar .NET 7 prefixet DOTNET_ istället för COMPlus_. Men prefixet COMPlus_ fortsätter att fungera som det ska. Om du ärI tidigare versioner av .NET-runtime bör miljövariabler fortfarande använda prefixet COMPlus_



Skapa ett nytt .NET Core 6-applikationstest

Använd VS 2022 för att testa ett nytt .NET Core 6-apptest med följande kod:

Starta programmet med kommandot cmd, som visas på bilden nedan:

COMPlus_EnableCrashReport=1
COMPlus_DbgEnableMiniDump=1
COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp"
COMPlus_CreateDumpDiagnostics=1
Undantag för ohanterad användning. System. Undantag: itsvse.com
   på Program. <Main>$(String[] args) i C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:rad 9
[createdump] Skriver minidump med heap för att arkivera C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp
[createdump] Dump framgångsrikt skriven



Du kan se att efter att programmet kraschat onormalt är det framgångsrikt under den katalog vi angerDumpfilen .dmp genererasHur man analyserar det är en annan sak.

Windows Platform Universella inställningar

I Windows kan Windows Felrapportering (WER) konfigureras för att generera dumps när en applikation kraschar.

Denna metod fungerar för alla program, inte bara . .NET-program, såsom C++, Go, etc.; Och och. NÄT. NET Core-versionen

  • Öppna regedit.exe
  • Öppna katalogen HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
  • Skapa en KEY DumpFolder av typen REG_EXPAND_SZ för att konfigurera katalogen där dumpfilerna lagras
  • Du kan också skapa en KEY DumpCount av typen REG_DWORD konfigurera det totala antalet dumps




Självklart kan du också konfigurera dessa med PowerShell-kommandon:

Enligt ovanstående konfiguration, om programmet avslutar onormalt, kommer det att skapa en programdump i katalogen %LOCALAPPDATA%\CrashDumps.

Resurser:

Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.




Föregående:Detaljerad förklaring av lagringsreglerna för Discuz-bilagbilder, avatarbilder och albumbilder
Nästa:Praktisk funktion: Använd BundleTransformer för att ersätta System.Web.Optimization
 Hyresvärd| Publicerad den 2022-11-6 22:44:06 |
Skicka dumpfiler:

Efter att programmet startat, avgör om katalogen har en genererad dumpfil, i så fall skicka filen till det angivna gränssnittet och ta sedan bort filen.
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com