Anforderungen: Bei der Entwicklung von Anwendungen mit .NET/C# ist es für einen Entwickler unmöglich, eine stabile und robuste Ausführung des Programms sicherzustellen, was mit der Codelogik des Entwicklers oder der laufenden Umgebung des Benutzers zusammenhängen kannEs gibt keine 100%ige Garantie, dass die von Ihnen entwickelte Anwendung problemlos istEs ist nicht schlimm, ein Problem zu haben, aber das Schlimme ist, dass es ein Problem gibt, das die Ursache nicht finden und lösen kann.
Wenn die Anwendung nicht wie erwartet ausgeführt wird und ein abnormaler Abschluss auftritt, wie kann dann automatisch eine DMP-Dump-Datei generiert werden, um das Problem zu beheben?
Ein Dump ist eine Datei, die einen Schnappschuss des Prozesses zum Zeitpunkt seiner Erstellung enthält und verwendet werden kann, um den Zustand der Anwendung zu überprüfen. Wenn es schwierig ist, einen Debugger an eine .NET-Anwendung wie eine Produktions- oder CI-Umgebung anzuhängen, können Sie Dumps verwenden, um die Anwendung zu debuggen. Die Verwendung von Dumps erfasst den Zustand problematischer Prozesse, und der Zustand kann direkt überprüft werden, ohne die Anwendung zu stoppen.
Sammle Müllablagerungen
Sie können Umweltvariablen verwenden, um Ihre Anwendung so zu konfigurieren, dass sie im Falle eines Ausfalls Dumps sammelt. Das ist hilfreich, wenn du die Ursache des Scheiterns wissen möchtest. Zum Beispiel hilft das Erfassen von Dumps, wenn eine Ausnahme ausgelöst wird, um Probleme zu erkennen, indem der App-Status überprüft wird, falls sie fehlschlägt.
Die folgende Tabelle zeigt die Umweltvariablen, mit denen Sie Ihre Anwendung so konfigurieren können, dass sie im Falle eines Ausfalls Dumps sammelt.
Umgebungsvariable | illustrieren | Vorgabe | | COMPlus_DbgEnableMiniDump oder DOTNET_DbgEnableMiniDump | Wenn auf 1 eingestellt, aktiviere die Generierung des Core-Dumps. | 0 | | COMPlus_DbgMiniDumpType oder DOTNET_DbgMiniDumpType | Die Art von Müll, die man sammeln sollte. Siehe die untenstehende Tabelle für Details | 2 (MiniDumpWithPrivateReadWriteMemory) | | COMPlus_DbgMiniDumpName oder DOTNET_DbgMiniDumpName | Schreibe den Dateipfad zum Dump. Stellen Sie sicher, dass der Benutzer, der den dotnet-Prozess ausführt, Schreibzugriff auf das angegebene Verzeichnis hat. | /tmp/coredump.<pid> | | COMPlus_CreateDumpDiagnostics oder DOTNET_CreateDumpDiagnostics | Wenn auf 1 gesetzt, aktiviere das Diagnoselogging für den Dump-Prozess. | 0 | | COMPlus_EnableCrashReport oder DOTNET_EnableCrashReport | (Benötigt .NET 6 oder neuer) Wenn auf 1 gesetzt, erzeugt die Laufzeit einen JSON-formatierten Fehlerbericht, der Informationen über die Threads und Stack-Frames der fehlgeschlagenen Anwendung enthält. Der Name des Absturzberichts ist der Dump-Pfad/Name, der an .crashreport.json angehängt wurde. | | | COMPlus_CreateDumpVerboseDiagnostics oder DOTNET_CreateDumpVerboseDiagnostics | (Benötigt .NET 7 oder neuer) Wenn auf 1 gesetzt, aktivieren Sie detailliertes Diagnoselogging für den Dump-Prozess. | 0 | | COMPlus_CreateDumpLogToFile oder DOTNET_CreateDumpLogToFile | (.NET 7 oder später erforderlich) Der Dateipfad zur Diagnosenachricht sollte geschrieben werden. Wenn nicht gesetzt, wird eine Diagnosemeldung an die Konsole der fehlgeschlagenen Anwendung geschrieben. | |
Für diese Umweltvariablen standardisiert .NET 7 das Präfix DOTNET_ statt COMPlus_. Das Präfix COMPlus_ funktioniert jedoch weiterhin ordnungsgemäß. Wenn du es bistIn früheren Versionen der .NET-Laufzeit sollten Umweltvariablen weiterhin das COMPlus_-Präfix verwenden。
Erstellen Sie einen neuen .NET Core 6 Anwendungstest
Verwenden Sie VS 2022, um einen neuen .NET Core 6 App-Test mit folgendem Code zu testen:
Starte das Programm mit dem cmd-Befehl, wie im untenstehenden Bild gezeigt:
COMPlus_EnableCrashReport=1 COMPlus_DbgEnableMiniDump=1 COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp" COMPlus_CreateDumpDiagnostics=1 Unbearbeitete Ausnahme. System.Ausnahme: itsvse.com bei Programm. <Main>$(String[] args) in C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:line 9 [createdump] Minidump mit Heap schreiben, um C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp [createdump] Dump erfolgreich geschrieben
Man sieht, dass das Programm nach einem abnormalen Absturz erfolgreich unter dem von uns angegebenen Verzeichnis verwendet wirdDer Dump .dmp Datei wird erzeugtWas die Analyse angeht, ist das eine andere Sache.
Windows Platform Universal-Einstellungen
In Windows kann Windows Error Reporting (WER) so konfiguriert werden, dass Dumps erzeugt werden, wenn eine Anwendung abstürzt.
Diese Methode funktioniert für alle Programme, nicht nur . .NET-Programme wie C++, Go usw.; Und und. NETTO. NET Core-Version
- Öffne regedit.exe
- Öffnen Sie das Verzeichnis HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
- Erstelle einen KEY DumpFolder vom Typ REG_EXPAND_SZ, um das Verzeichnis zu konfigurieren, in dem die Dump-Dateien gespeichert sind.
- Man kann auch einen KEY DumpCount vom Typ erstellen, REG_DWORD die Gesamtmenge der Dumps konfigurieren
Natürlich können Sie diese auch mit PowerShell-Befehlen konfigurieren:
Laut der obigen Konfiguration erstellt das Programm, wenn es abnormal ausgeht, einen Programm-Dump im Verzeichnis %LOCALAPPDATA%\CrashDumps.
Betriebsmittel:
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
|