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 pause, l’exécution incrémentale, l’examen et la reprise vous offrent 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.

Test des unités

Le test unitaire est un élément clé de l’intégration et du déploiement continus 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 un code qui est 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 d’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 ont 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 dans laquelle le code est instrumenté pour produire un journal, un enregistrement des événements intéressants qui se sont produits pendant l’exécution du programme. Souvent, un ensemble de bases de référence d’événements de journal est configuré avec ses paramètres par défaut et une journalisation plus étendue peut être activée sur demande pour diagnostiquer des problèmes particuliers. La surcharge de performances varie en fonction de la quantité de données enregistrées.

Traces distribuées

Le suivi distribué est une forme spécialisée de journalisation qui vous permet de localiser les défaillances 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, en corrélant ensemble le travail effectué par différents composants d’application et en le séparant d’autres tâches que l’application pourrait effectuer pour les requêtes simultanées. Il est possible de suivre chaque requête et l’échantillonnage peut éventuellement être utilisé pour lier la surcharge de performances.

Vidages

Une image mémoire est un fichier qui contient une capture instantanée du processus au moment de la création. Celles-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 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 dans les environnements Linux non conteneurisés peuvent également être utilisés pour collecter des diagnostics dans des conteneurs. Quelques modifications d’utilisation sont nécessaires pour s’assurer que les outils fonctionnent dans un conteneur Docker.

Outils globaux de diagnostic .NET Core

dotnet-counters

dotnet-counters est un outil de monitoring des performances pour le monitoring de l’intégrité de premier niveau et l’examen 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 permet de collecter et d’analyser les images mémoire principales Windows et Linux sans débogueur natif.

dotnet-gcdump

L’outil dotnet-gcdump permet de collecter les images mémoire GC (Garbage Collector) des processus .NET en direct.

dotnet-trace

.NET Core inclut ce que l’on appelle le EventPipe par lequel les données de diagnostic sont exposées. L’outil dotnet-trace vous permet de consommer des données de profilage intéressantes à partir de votre application qui peuvent vous aider dans les scénarios où vous devez provoquer le ralentissement 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 une image mémoire principale ou un minidump. Utilisez cet outil si vous avez besoin de symboles et de modules pour déboguer un fichier d’image mémoire 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 de client 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 de 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 privation de ThreadPool

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

Déboguer StackOverflow

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

Déboguer des vidages Linux

Déboguer des images mémoire Linux explique comment collecter et analyser des images mémoire sur Linux.

Mesurer les performances à l’aide d’EventCounters

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