Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 5902|Risposta: 1

[.NET Core] [Combattimento vero e proprio]. Le applicazioni NET/C# si bloccano e le eccezioni generano automaticamente file di dump DMP

[Copiato link]
Pubblicato il 6-11-2022 22:41:42 | | | |
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_DbgEnableMiniDumpSe impostato a 1, abilita la generazione di core dump.0
COMPlus_DbgMiniDumpType o DOTNET_DbgMiniDumpTypeIl tipo di discarica da raccogliere. Vedi la tabella qui sotto per i dettagli2 (MiniDumpWithPrivateReadWriteMemory)
COMPlus_DbgMiniDumpName o DOTNET_DbgMiniDumpNameScrivi 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_CreateDumpDiagnosticsSe 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.




Precedente:Spiegazione dettagliata delle regole di archiviazione per le immagini di allegazione Discuz, le immagini degli avatar e le immagini degli album
Prossimo:Funzionamento pratico: Usa BundleTransformer per sostituire System.Web.Optimization
 Padrone di casa| Pubblicato il 6-11-2022 22:44:06 |
Invia file di dump:

Dopo l'avvio del programma, verifica se la directory ha un file dump generato; in tal caso, invia il file all'interfaccia specificata e poi cancella il file.
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com