Requisiti: Quando si sviluppano applicazioni che utilizzano .NET/C#, è impossibile per qualsiasi sviluppatore garantire un'esecuzione stabile e robusta del programma, che può essere legata alla logica del codice dello sviluppatore o all'ambiente in esecuzione dell'utenteNon c'è alcuna garanzia al 100% che l'applicazione che svilupperai sarà priva di problemiNon è terribile avere un problema, ma la cosa terribile è che c'è un problema che non può trovare la causa e risolverla.
Se l'applicazione non viene eseguita come previsto e si verifica un'uscita anomala, come può essere generato automaticamente un file di dump DMP per risolvere il problema?
Un dump è un file che contiene una panoramica del processo al momento della sua creazione e può essere utilizzato per verificare lo stato dell'applicazione. Quando è difficile collegare un debugger a un'applicazione .NET, come un ambiente di produzione o CI, puoi usare dump per debugare l'applicazione. L'uso dei dump cattura lo stato dei processi problematici, e lo stato può essere verificato direttamente senza fermare l'applicazione.
Raccolta delle scarie
Puoi usare le variabili di ambiente per configurare la tua applicazione in modo che raccoglia dump in caso di guasto. Questo è utile se vuoi sapere la causa del guasto. Ad esempio, catturare i dump quando viene lanciata un'eccezione aiuta a identificare i problemi controllando lo stato dell'app se fallisce.
La tabella seguente mostra le variabili ambientali che puoi utilizzare per configurare la tua applicazione affinché raccolga dump in caso di guasto.
Variabile ambiente | illustrare | Default | | COMPlus_DbgEnableMiniDump o DOTNET_DbgEnableMiniDump | Se impostato a 1, abilita la generazione di core dump. | 0 | | COMPlus_DbgMiniDumpType o DOTNET_DbgMiniDumpType | Il tipo di discarica da raccogliere. Vedi la tabella qui sotto per i dettagli | 2 (MiniDumpWithPrivateReadWriteMemory) | | COMPlus_DbgMiniDumpName o DOTNET_DbgMiniDumpName | Scrivi il percorso del file nel dump. Assicurarsi che l'utente che esegue il processo dotnet abbia accesso in scrittura alla directory specificata. | /tmp/coredump.<pid> | | COMPlus_CreateDumpDiagnostics o DOTNET_CreateDumpDiagnostics | Se impostato a 1, abilita la registrazione diagnostica per il processo di dump. | 0 | | COMPlus_EnableCrashReport o DOTNET_EnableCrashReport | (Richiede .NET 6 o successivo) Se impostato su 1, l'esecuzione genera un rapporto di fallimento in formato JSON che include informazioni sui thread e i frame dello stack dell'applicazione fallita. Il nome del report di crash è il percorso/nome di dump aggiunto a .crashreport.json. | | | COMPlus_CreateDumpVerboseDiagnostics o DOTNET_CreateDumpVerboseDiagnostics | (Richiede .NET 7 o versioni successive) Se impostato su 1, abilita la registrazione diagnostica dettagliata per il processo di dump. | 0 | | COMPlus_CreateDumpLogToFile o DOTNET_CreateDumpLogToFile | (.NET 7 o successivo richiesto) Deve essere scritto il percorso del file verso il messaggio diagnostico. Se non impostato, viene scritto un messaggio diagnostico sulla console dell'applicazione guasta. | |
Per queste variabili ambientali, .NET 7 standardizza il prefisso DOTNET_ invece di COMPlus_. Tuttavia, il prefisso COMPlus_ continuerà a funzionare correttamente. Se lo seiNelle versioni precedenti del runtime .NET, le variabili di ambiente dovrebbero ancora usare il prefisso COMPlus_。
Crea un nuovo test applicativo .NET Core 6
Usa VS 2022 per testare un nuovo test di app .NET Core 6 con il seguente codice:
Avvia il programma usando il comando cmd, come mostrato nell'immagine sottostante:
COMPlus_EnableCrashReport=1 COMPlus_DbgEnableMiniDump=1 COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp" COMPlus_CreateDumpDiagnostics=1 Eccezione non risolta. Eccezione di sistema: itsvse.com al Programma. <Main>$(String[] args) in C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:riga 9 [createdump] Scrivere minidump con heap nel file C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp [createdump] Dump scritto con successo
Puoi vedere che dopo che il programma si blocca in modo anomalo, è riuscito a essere richiesto nella directory che specifichiamoIl file di dump .dmp viene generatoPer quanto riguarda come analizzarla, è un'altra questione.
Impostazioni universali della piattaforma Windows
In Windows, il Windows Error Reporting (WER) può essere configurato per generare dump quando un'applicazione va in crash.
Questo metodo funziona per tutti i programmi, non solo per . .NET, come C++, Go, ecc.; E e. RETE. Versione NET Core
- Aperto regedit.exe
- Apri la cartella HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Errori Reporting\LocalDumps
- Crea una KEY DumpFolder di tipo REG_EXPAND_SZ per configurare la directory dove sono memorizzati i file di dump
- Puoi anche creare un KEY DumpCount di tipo REG_DWORD configurare il totale dei dump
Naturalmente, puoi anche configurarli usando comandi PowerShell:
Secondo la configurazione sopra, se il programma esce in modo anomalo, creerà un dump del programma nella directory %LOCALAPPDATA%\CrashDumps.
Risorse:
Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.
|