|
|
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_DbgEnableMiniDump | Als deze op 1 staat, schakel dan core dump generation in. | 0 | | COMPlus_DbgMiniDumpType of DOTNET_DbgMiniDumpType | Het soort vuilnisbelt om te verzamelen. Zie de onderstaande tabel voor details | 2 (MiniDumpWithPrivateReadWriteMemory) | | COMPlus_DbgMiniDumpName of DOTNET_DbgMiniDumpName | Schrijf 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_CreateDumpDiagnostics | Als 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 albumafbeeldingenVolgend:Praktische werking: Gebruik BundleTransformer ter vervanging van System.Web.Optimization
|