Exigences : Lors du développement d’applications utilisant .NET/C#, il est impossible pour un développeur d’assurer une exécution stable et robuste du programme, ce qui peut être lié à la logique du code du développeur ou à l’environnement d’exécution de l’utilisateurIl n’y a aucune garantie à 100 % que l’application que vous développerez sera sans problèmeCe n’est pas terrible d’avoir un problème, mais le plus terrible, c’est qu’il existe un problème qui ne peut pas en trouver la cause ni la résoudre.
Si l’application n’est pas exécutée comme prévu et qu’une sortie anormale survient, comment un fichier de vidage DMP peut-il être généré automatiquement pour dépanner le problème ?
Un dump est un fichier qui contient un instantané du processus lors de sa création et peut être utilisé pour vérifier l’état de l’application. Lorsqu’il est difficile d’attacher un débogueur à une application .NET, comme un environnement de production ou d’ingénierie de données, vous pouvez utiliser des dumps pour déboguer l’application. L’utilisation de dumps capture l’état des processus problématiques, et cet état peut être vérifié directement sans arrêter l’application.
Collecte des déversements
Vous pouvez utiliser des variables d’environnement pour configurer votre application afin qu’elle collecte les dumps en cas de défaillance. C’est utile si vous voulez connaître la cause de la défaillance. Par exemple, capturer des dumps lorsqu’une exception est lancée aide à identifier les problèmes en vérifiant l’état de l’application en cas d’échec.
Le tableau suivant présente les variables d’environnement que vous pouvez utiliser pour configurer votre application afin qu’elle collecte les dumps en cas de défaillance.
Variable d’environnement | illustrer | Faire défaut | | COMPlus_DbgEnableMiniDump ou DOTNET_DbgEnableMiniDump | Si c’est réglé à 1, activez la génération de dump de cœur. | 0 | | COMPlus_DbgMiniDumpType ou DOTNET_DbgMiniDumpType | Le genre de décharge à collecter. Voir le tableau ci-dessous pour plus de détails | 2 (MiniDumpAvecMémoirePrivéeLectureÉcritureÉcriture) | | COMPlus_DbgMiniDumpName ou DOTNET_DbgMiniDumpName | Écrivez le chemin du fichier vers le dump. Assurez-vous que l’utilisateur exécutant le processus dotnet dispose d’un accès en écriture au répertoire spécifié. | /tmp/coredump.<pid> | | COMPlus_CreateDumpDiagnostics ou DOTNET_CreateDumpDiagnostics | Si c’est réglé à 1, activez la journalisation de diagnostic pour le processus de dump. | 0 | | COMPlus_EnableCrashReport ou DOTNET_EnableCrashReport | (Nécessite .NET 6 ou une version ultérieure) Si l’exécution est réglée sur 1, l’exécution génère un rapport d’échec au format JSON qui inclut des informations sur les threads et les trames de pile de l’application défaillante. Le nom du rapport de plantage correspond au chemin/nom de dump ajouté à .crashreport.json. | | | COMPlus_CreateDumpVerboseDiagnostics ou DOTNET_CreateDumpVerboseDiagnostics | (Nécessite .NET 7 ou une version ultérieure) Si réglé sur 1, activez la journalisation de diagnostic détaillée pour le processus de dump. | 0 | | COMPlus_CreateDumpLogToFile ou DOTNET_CreateDumpLogToFile | (.NET 7 ou versions ultérieures requises) Le chemin du fichier vers le message de diagnostic doit être écrit. Si elle n’est pas activée, un message de diagnostic est écrit sur la console de l’application défaillante. | |
Pour ces variables d’environnement, .NET 7 standardise le préfixe DOTNET_ au lieu de COMPlus_. Cependant, le préfixe COMPlus_ continuera à fonctionner correctement. Si c’est le casDans les versions antérieures de l’exécution .NET, les variables d’environnement devaient encore utiliser le préfixe COMPlus_。
Créer un nouveau test d’application .NET Core 6
Utilisez VS 2022 pour tester un nouveau test d’application .NET Core 6 avec le code suivant :
Lancez le programme avec la commande cmd, comme montré sur l’image ci-dessous :
COMPlus_EnableCrashReport=1 COMPlus_DbgEnableMiniDump=1 COMPlus_DbgMiniDumpName="C :\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp » COMPlus_CreateDumpDiagnostics=1 Exception non traitée. Exception. Système : itsvse.com au programme. <Main>$(String[] args) dans C :\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs :line 9 [createdump] Écrire un minidump avec le tas vers le fichier C :\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp [createdump] Dump réussi
Vous pouvez voir qu’après un plantage anormal du programme, il est réussi dans le répertoire que nous spécifionsLe fichier de .dmp de vidage est généréQuant à l’analyse, c’est une autre histoire.
Paramètres universels de la plateforme Windows
Sous Windows, le rapport d’erreurs Windows (WER) peut être configuré pour générer des dumps lorsqu’une application plante.
Cette méthode fonctionne pour tous les programmes, pas seulement pour . des programmes .NET, tels que C++, Go, etc. ; Et et. FILET. Version NET Core
- Ouvre regedit.exe
- Ouvrez le répertoire HKEY_LOCAL_MACHINE\LOGICIEL\Microsoft\Windows\Windows Rapport d’erreurs\LocalDumps
- Créer un KEY DumpFolder de type REG_EXPAND_SZ pour configurer le répertoire où sont stockés les fichiers de vidage
- Vous pouvez également créer un KEY DumpCount de type REG_DWORD configurer le nombre total de dumps
Bien sûr, vous pouvez aussi configurer ces éléments avec des commandes PowerShell :
Selon la configuration ci-dessus, si le programme sort de manière anormale, il créera un vidage de programme dans le répertoire %LOCALAPPDATA %\CrashDumps.
Ressources:
La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.
|