Cerințe: Când se dezvoltă aplicații folosind .NET/C#, este imposibil ca vreun dezvoltator să asigure o execuție stabilă și robustă a programului, ceea ce poate fi legat de logica codului dezvoltatorului sau de mediul de rulare al utilizatoruluiNu există nicio garanție 100% că aplicația pe care o dezvolți va fi fără problemeNu este groaznic să ai o problemă, dar partea groaznică este că există o problemă care nu poate găsi cauza și să o rezolve.
Dacă aplicația nu este executată conform așteptărilor și apare o ieșire anormală, cum poate fi generat automat un fișier dump DMP pentru a depana problema?
Un dump este un fișier care conține o imagine instantanee a procesului la momentul creării acestuia și poate fi folosit pentru a verifica starea aplicației. Când este dificil să atașezi un debugger la o aplicație .NET, cum ar fi un mediu de producție sau CI, poți folosi dump-uri pentru a depana aplicația. Folosirea dump-urilor surprinde starea proceselor problematice, iar starea poate fi verificată direct fără a opri aplicația.
Colectarea dump-urilor
Poți folosi variabilele de mediu pentru a-ți configura aplicația să colecteze dump-uri în caz de defecțiune. Acest lucru este util dacă vrei să afli cauza eșecului. De exemplu, capturarea dump-urilor când o excepție este aruncată ajută la identificarea problemelor prin verificarea stării aplicației dacă aceasta eșuează.
Tabelul următor arată variabilele de mediu pe care le poți folosi pentru a-ți configura aplicația să colecteze dump-uri în caz de defectare.
Variabila de mediu | ilustra | Implicit | | COMPlus_DbgEnableMiniDump sau DOTNET_DbgEnableMiniDump | Dacă este setat la 1, activează generarea de core dump. | 0 | | COMPlus_DbgMiniDumpType sau DOTNET_DbgMiniDumpType | Tipul de groapă de depozit de colectat. Vezi tabelul de mai jos pentru detalii | 2 (MiniDumpWithPrivateReadWriteMemory) | | COMPlus_DbgMiniDumpName sau DOTNET_DbgMiniDumpName | Scrie calea fișierului către dump. Asigurați-vă că utilizatorul care rulează procesul dotnet are acces de scriere la directorul specificat. | /tmp/coredump.<pid> | | COMPlus_CreateDumpDiagnostics sau DOTNET_CreateDumpDiagnostics | Dacă este setat la 1, activează logarea diagnosticului pentru procesul de dump. | 0 | | COMPlus_EnableCrashReport sau DOTNET_EnableCrashReport | (Necesită .NET 6 sau versiune ulterioară) Dacă este setat la 1, runtime-ul generează un raport de eșec format JSON care include informații despre firele de execuție și cadrele de stivă ale aplicației eșuate. Numele raportului de accident este calea/numele de dump adăugat la .crashreport.json. | | | COMPlus_CreateDumpVerboseDiagnostics sau DOTNET_CreateDumpVerboseDiagnostics | (Necesită .NET 7 sau mai târziu) Dacă este setat la 1, activați jurnalizarea detaliată de diagnostic pentru procesul de dump. | 0 | | COMPlus_CreateDumpLogToFile sau DOTNET_CreateDumpLogToFile | (.NET 7 sau mai târziu necesar) Calea fișierului către mesajul de diagnostic trebuie scrisă. Dacă nu este setat, un mesaj de diagnostic este scris pe consola aplicației eșuate. | |
Pentru aceste variabile de mediu, .NET 7 standardizează prefixul DOTNET_ în loc de COMPlus_. Totuși, prefixul COMPlus_ va continua să funcționeze corect. Dacă eștiÎn versiunile anterioare ale runtime-ului .NET, variabilele de mediu ar trebui să folosească în continuare prefixul COMPlus_。
Creează un nou test de aplicație .NET Core 6
Folosește VS 2022 pentru a testa un nou test de aplicație .NET Core 6 cu următorul cod:
Pornește programul folosind comanda cmd, așa cum se arată în imaginea de mai jos:
COMPlus_EnableCrashReport=1 COMPlus_DbgEnableMiniDump=1 COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp" COMPlus_CreateDumpDiagnostics=1 Excepție nerezolvată. Sistem.Excepție: itsvse.com la Program. <Main>$(String[] args) în C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:line 9 [createdump] Scrierea minidump-ului cu heap către fișierul C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp [createdump] Dump scris cu succes
Poți vedea că, după ce programul se blochează anormal, acesta are succes în directorul specificatFișierul .dmp dump este generatÎn ceea ce privește modul de analiză, este o altă poveste.
Setări universale ale platformei Windows
În Windows, Windows Error Reporting (WER) poate fi configurat să genereze dump-uri atunci când o aplicație se blochează.
Această metodă funcționează pentru toate programele, nu doar pentru . programe .NET, precum C++, Go etc.; Și și. NET. Versiunea NET Core
- Deschide regedit.exe
- Deschide directorul HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
- Creează un KEY DumpFolder de tip REG_EXPAND_SZ pentru a configura directorul unde sunt stocate fișierele dump
- Poți crea și un KEY DumpCount de tip REG_DWORD configura numărul total de dump-uri
Desigur, poți configura și acestea folosind comenzi PowerShell:
Conform configurației de mai sus, dacă programul iese anormal, va crea un dump de program în directorul %LOCALAPPDATA%\CrashDumps.
Resurse:
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
|