Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 5902|Antwoord: 1

[.NET Core] [Echte gevechten]. NET/C#-applicaties crashen en uitzonderingen genereren automatisch DMP-dumpbestanden

[Link kopiëren]
Geplaatst op 6-11-2022 22:41:42 | | | |
Vereisten: Bij het ontwikkelen van applicaties met .NET/C# is het voor een ontwikkelaar onmogelijk om een stabiele en robuuste uitvoering van het programma te garanderen, wat kan verband houden met de codelogica van de ontwikkelaar of de draaiende omgeving van de gebruikerEr is geen 100% garantie dat de applicatie die je ontwikkelt probleemloos zal zijnHet is niet verschrikkelijk om een probleem te hebben, maar het ergste is dat er een probleem is dat de oorzaak niet kan achterhalen en het probleem niet kan oplossen.

Als de applicatie niet zoals verwacht wordt uitgevoerd en er een abnormale exit optreedt, hoe kan er dan automatisch een DMP-dumpbestand worden gegenereerd om het probleem op te lossen?
Een dump is een bestand dat een snapshot bevat van het proces toen het werd aangemaakt en kan worden gebruikt om de status van de applicatie te controleren. Wanneer het moeilijk is om een debugger aan een .NET-applicatie te koppelen, zoals een productie- of CI-omgeving, kun je dumps gebruiken om de applicatie te debuggen. Het gebruik van dumps legt de toestand van problematische processen vast, en de toestand kan direct worden gecontroleerd zonder de applicatie te stoppen.

Verzamel vuilnisbelt

Je kunt omgevingsvariabelen gebruiken om je applicatie zo te configureren dat deze dumps verzamelt in geval van een storing. Dit is handig als je de oorzaak van het falen wilt weten. Bijvoorbeeld, het vastleggen van dumps wanneer een uitzondering wordt gegooid helpt om problemen te identificeren door de status van de app te controleren als deze faalt.

De volgende tabel toont de omgevingsvariabelen die je kunt gebruiken om je applicatie zo te configureren dat deze dumps verzamelt in geval van een storing.

Omgevingsvariabele
illustreren
Verstek
COMPlus_DbgEnableMiniDump of DOTNET_DbgEnableMiniDumpAls deze op 1 staat, schakel dan core dump generation in.0
COMPlus_DbgMiniDumpType of DOTNET_DbgMiniDumpTypeHet soort vuilnisbelt om te verzamelen. Zie de onderstaande tabel voor details2 (MiniDumpWithPrivateReadWriteMemory)
COMPlus_DbgMiniDumpName of DOTNET_DbgMiniDumpNameSchrijf het bestandspad naar de dump. Zorg ervoor dat de gebruiker die het dotnet-proces uitvoert schrijftoegang heeft tot de opgegeven map./tmp/coredump.<pid>
COMPlus_CreateDumpDiagnostics of DOTNET_CreateDumpDiagnosticsAls ingesteld op 1, schakel dan diagnostische logging in voor het dumpproces.0
COMPlus_EnableCrashReport of DOTNET_EnableCrashReport(Vereist .NET 6 of later) Als het op 1 is gezet, genereert de runtime een JSON-geformatteerd foutrapport met informatie over de threads en stackframes van de mislukte applicatie. De naam van het crashrapport is het dumppad/de naam die aan .crashreport.json is toegevoegd.
COMPlus_CreateDumpVerboseDiagnostics of DOTNET_CreateDumpVerboseDiagnostics(Vereist .NET 7 of later) Als ingesteld op 1, schakel gedetailleerde diagnostische logging in voor het dumpproces.0
COMPlus_CreateDumpLogToFile of DOTNET_CreateDumpLogToFile(.NET 7 of later vereist) Het bestandspad naar het diagnostisch bericht moet worden geschreven. Als deze niet is ingesteld, wordt er een diagnostisch bericht geschreven naar de console van de mislukte applicatie.

Voor deze omgevingsvariabelen standaardiseert .NET 7 het prefix DOTNET_ in plaats van COMPlus_. De COMPlus_-prefix blijft echter goed werken. Als je dat wel bentIn eerdere versies van de .NET-runtime zouden omgevingsvariabelen nog steeds het prefix COMPlus_ moeten gebruiken



Maak een nieuwe .NET Core 6 applicatietest aan

Gebruik VS 2022 om een nieuwe .NET Core 6-apptest te testen met de volgende code:

Start het programma met het cmd-commando, zoals te zien is in de onderstaande afbeelding:

COMPlus_EnableCrashReport=1
COMPlus_DbgEnableMiniDump=1
COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp"
COMPlus_CreateDumpDiagnostics=1
Onbehandelde uitzondering. Systeem.Uitzondering: itsvse.com
   bij Program. <Main>$(String[] args) in C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:regel 9
[createdump] Minidump schrijven met heap om C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp
[createdump] Dump succesvol geschreven



Je kunt zien dat nadat het programma abnormaal crasht, het succesvol onder de directory staat die we specificerenDe dump .dmp bestand wordt gegenereerdWat betreft hoe je het analyseert, is het een ander verhaal.

Windows Platform Universele Instellingen

In Windows kan Windows Error Reporting (WER) worden geconfigureerd om dumps te genereren wanneer een applicatie crasht.

Deze methode werkt voor alle programma's, niet alleen . .NET-programma's, zoals C++, Go, enz.; En en. NET. NET Core-versie

  • Open regedit.exe
  • Open de map HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
  • Maak een KEY DumpFolder van type REG_EXPAND_SZ aan om de map te configureren waar de dumpbestanden zijn opgeslagen
  • Je kunt ook een KEY DumpCount van het type maken REG_DWORD het totale aantal dumps configureren




Natuurlijk kun je deze ook configureren met PowerShell-commando's:

Volgens bovenstaande configuratie zal het programma, als het abnormaal afsluit, een programmadump aanmaken in de %LOCALAPPDATA%\CrashDumps-map.

Weg:

De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.




Vorig:Gedetailleerde uitleg van de opslagregels voor Discuz-bijlageafbeeldingen, avatarfoto's en albumafbeeldingen
Volgend:Praktische werking: Gebruik BundleTransformer ter vervanging van System.Web.Optimization
 Huisbaas| Geplaatst op 6-11-2022 22:44:06 |
Dumpbestanden versturen:

Bepaal nadat het programma is gestart of de map een gegenereerd dumpbestand bevat; indien ja, dien het bestand in bij de opgegeven interface en verwijder het bestand vervolgens.
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com