Quels sont les outils de diagnostic disponibles dans .NET Core ?

Les logiciels ne se comportent pas toujours comme vous l'attendez, mais .NET Core dispose d’outils et d’API qui vous aideront à diagnostiquer ces problèmes rapidement et efficacement.

Cet article vous aide à trouver les différents outils dont vous avez besoin.

Débogueurs

Les débogueurs vous permettent d’interagir avec votre programme. La suspension, l’exécution incrémentielle, l’examen et la reprise vous donnent un aperçu du comportement de votre code. Un débogueur est un bon choix pour diagnostiquer les problèmes fonctionnels qui peuvent être facilement reproduits.

Effectuer des tests unitaires

Le test unitaire est un composant clé de l’intégration continue et du déploiement de logiciels de haute qualité. Les tests unitaires sont conçus pour vous prévenir d’un problème survenu.

Instrumentation pour l’observabilité

.NET prend en charge les techniques d’instrumentation standard du secteur à l’aide de métriques, de journaux et de traces distribuées. L’instrumentation est du code ajouté à un projet logiciel pour enregistrer ce qu’il fait. Ces informations peuvent ensuite être collectées dans des fichiers, des bases de données ou en mémoire et analysées pour comprendre le fonctionnement d’un programme logiciel. Cela est souvent utilisé dans les environnements de production pour surveiller les problèmes et les diagnostiquer. Le runtime .NET dispose d’une instrumentation intégrée qui peut éventuellement être activée et des API qui vous permettent d’ajouter une instrumentation personnalisée spécialisée pour votre application.

Mesures

Les métriques sont des mesures numériques enregistrées au fil du temps pour surveiller les performances et l’intégrité des applications. Les métriques sont souvent utilisées pour générer des alertes lorsque des problèmes potentiels sont détectés. Les métriques présentent une surcharge de performances très faible et de nombreux services les configurent en tant que données de télémétrie toujours activées.

Journaux d’activité

La journalisation est une technique où le code est instrumenté pour produire un journal, un enregistrement d’événements intéressants qui se sont produits pendant l’exécution du programme. Souvent, un ensemble de journaux de référence est configuré par défaut et une journalisation plus étendue peut être activée à la demande pour diagnostiquer des problèmes particuliers. La surcharge de performances est variable en fonction de la quantité de données journalisées.

Traces distribuées

Le suivi distribué est une forme spécialisée de journalisation qui vous permet de localiser les échecs et les problèmes de performances au sein des applications distribuées sur plusieurs ordinateurs ou processus. Cette technique effectue le suivi des requêtes par le biais d’une application qui associe le travail effectué par différents composants d’application et en la séparant d’autres tâches que l’application peut effectuer pour les requêtes simultanées. Il est possible de suivre chaque requête et échantillonnage peut éventuellement être utilisé pour lier la surcharge de performances.

Vidages

Un vidage est un fichier qui contient un instantané du processus au moment de la création. Ceux-ci peuvent être utiles pour examiner l’état de votre application à des fins de débogage.

symboles

Les symboles sont un mappage entre le code source et le fichier binaire produit par le compilateur. Ils sont couramment utilisés par les débogueurs .NET pour résoudre les numéros de ligne source, les noms de variables locales et d’autres types d’informations de diagnostic.

Collecter les diagnostics dans les conteneurs

Les mêmes outils de diagnostic que ceux utilisés dans les environnements Linux non conteneurisés peuvent également être utilisés pour collecter des diagnostics dans des conteneurs. Il n’y a que quelques modifications d’utilisation nécessaires pour vous assurer que les outils fonctionnent dans un conteneur Docker.

Outils globaux de diagnostic .NET Core

dotnet-counters

dotnet-counters est un outil d’analyse des performances pour l’analyse de l’intégrité de premier niveau et l’investigation des performances. Il observe les valeurs des compteurs de performances publiées via l’API EventCounter . Par exemple, vous pouvez surveiller rapidement des éléments tels que l’utilisation du processeur ou le taux d’exceptions levées dans votre application .NET Core.

dotnet-dump

L’outil dotnet-dump est un moyen de collecter et d’analyser les vidages de cœurs Windows et Linux sans débogueur natif.

dotnet-gcdump

L’outil dotnet-gcdump est un moyen de collecter les vidages GC (Garbage Collector) des processus .NET en direct.

dotnet-trace

.NET Core inclut ce qui est appelé par le EventPipe biais duquel les données de diagnostic sont exposées. L’outil dotnet-trace vous permet d’utiliser des données de profilage intéressantes à partir de votre application qui peuvent vous aider dans les scénarios où vous devez provoquer l’exécution lente des applications.

dotnet-stack

L’outil dotnet-stack vous permet d’imprimer rapidement les piles managées pour tous les threads d’un processus .NET en cours d’exécution.

dotnet-symbol

dotnet-symbol télécharge les fichiers (symboles, DAC/DBI, fichiers hôtes, etc.) nécessaires pour ouvrir un vidage de base ou un minidump. Utilisez cet outil si vous avez besoin de symboles et de modules pour déboguer un fichier de vidage capturé sur un autre ordinateur.

dotnet-sos

dotnet-sos installe l’extension de débogage SOS sur Linux et macOS (et sur Windows si vous utilisez Windbg/cdb).

PerfCollect

PerfCollect est un script bash que vous pouvez utiliser pour collecter des traces avec perf et LTTng pour une analyse plus approfondie des performances des applications .NET s’exécutant sur des distributions Linux.

Tutoriels de diagnostics .NET Core

Écrire votre propre outil de diagnostic

La bibliothèque cliente de diagnostics vous permet d’écrire votre propre outil de diagnostic personnalisé le mieux adapté à votre scénario de diagnostic. Recherchez des informations dans la référence de l’API Microsoft.Diagnostics.NETCore.Client.

Déboguer une fuite de mémoire

Tutoriel : Déboguer une fuite de mémoire vous guide dans la recherche d’une fuite de mémoire. L’outil dotnet-counters est utilisé pour confirmer la fuite et l’outil dotnet-dump est utilisé pour diagnostiquer la fuite.

Déboguer une utilisation élevée du processeur

Tutoriel : Déboguer une utilisation élevée du processeur vous guide tout au long de l’examen de l’utilisation élevée du processeur. Il utilise l’outil dotnet-counters pour confirmer l’utilisation élevée du processeur. Il vous guide ensuite dans l’utilisation de Trace pour l’utilitaire d’analyse des performances (dotnet-trace) ou Linux perf pour collecter et afficher le profil d’utilisation du processeur.

Déboguer un interblocage

Tutoriel : Déboguer un interblocage vous montre comment utiliser l’outil dotnet-dump pour examiner les threads et les verrous.

Déboguer la famine de ThreadPool

Tutoriel : Déboguer la famine de threadPool vous montre comment utiliser les compteurs dotnet et les outils dotnet-stack pour examiner la famine de ThreadPool.

Déboguer StackOverflow

Tutoriel : Déboguer un StackOverflow montre comment déboguer un StackOverflowException sur Linux.

Déboguer des vidages Linux

Déboguer des vidages Linux explique comment collecter et analyser des vidages sur Linux.

Mesurer les performances à l’aide d’EventCounters

Tutoriel : Mesurer les performances à l’aide d’EventCounters dans .NET vous montre comment utiliser l’API pour mesurer les EventCounter performances dans votre application .NET.