Déboguer des vidages Linux

Cet article s’applique à : ✔️ SDK .NET Core 3.0 et versions ultérieures

Collecter des vidages sur Linux

Conseil

Pour obtenir des questions fréquentes sur la collecte de vidage, l’analyse et d’autres mises en garde, consultez Vidages : FAQ.

Les deux méthodes recommandées pour collecter des vidages sur Linux sont les suivantes :

Analyser les vidages sur Linux

Une fois qu’un vidage est collecté, il peut être analysé à l’aide de l’outil dotnet-dump avec la commande dotnet-dump analyze. Cette étape d’analyse doit être exécutée sur un ordinateur qui a la même architecture et la distribution Linux que l’environnement dans lequel le vidage a été capturé. L’outil dotnet-dump prend en charge l’affichage d’informations sur le code .NET, mais n’est pas utile pour comprendre les problèmes de code pour d’autres langages tels que C et C++.

Vous pouvez également utiliser LLDB pour analyser les vidages sur Linux, ce qui permet d’analyser le code managé et natif. LLDB utilise l’extension SOS pour déboguer du code managé. L’outil CLI dotnet-sos peut être utilisé pour installer SOS, qui a de nombreuses commandes utiles pour le débogage du code managé. Pour analyser les vidages .NET Core, LLDB et SOS nécessitent les fichiers binaires .NET Core suivants à partir de l’environnement dans lequel le vidage a été créé :

  1. libmscordaccore.so
  2. libcoreclr.so
  3. dotnet (l’hôte utilisé pour lancer l’application)

Dans la plupart des cas, ces fichiers binaires peuvent être téléchargés à l’aide de l’outil dotnet-symbol. Si les fichiers binaires nécessaires ne peuvent pas être téléchargés avec dotnet-symbol (par exemple, si une version privée de .NET Core créée à partir de la source était en cours d’utilisation), il peut être nécessaire de copier les fichiers répertoriés ci-dessus à partir de l’environnement dans lequel le vidage a été créé. Si les fichiers ne se trouvent pas en regard du fichier de vidage, vous pouvez utiliser la commande LLDB/SOS setclrpath <path> pour définir le chemin d’accès à partir duquel ils doivent être chargés et setsymbolserver -directory <path> pour définir le chemin d’accès à rechercher dans les fichiers de symboles.

Une fois les fichiers nécessaires disponibles, le vidage peut être chargé dans LLDB en spécifiant l’hôte dotnet comme exécutable pour déboguer :

lldb --core <dump-file> <host-program>

Dans la commande précédente, <dump-file> est le chemin d’accès du vidage à analyser et <host-program> est le programme natif qui a démarré l’application .NET Core. Il s’agit généralement du fichier binaire dotnet, sauf si l’application est autonome, auquel cas il s’agit du nom de l’application sans l’extension .dll.

Une fois LLDB démarré, il peut être nécessaire d’utiliser la commande setsymbolserver pour pointer à l’emplacement de symbole approprié (setsymbolserver -ms pour utiliser le serveur de symboles de Microsoft ou setsymbolserver -directory <path> pour spécifier un chemin d’accès local). Pour charger des symboles natifs, exécutez loadsymbols. À ce stade, vous pouvez utiliser des commandes SOS pour analyser le vidage.

Notes

LLDB peut être installé avec la commande sudo apt-get install lldb

Analyser les vidages sur Windows

Les vidages collectés à partir d’une machine Linux peuvent également être analysés sur une machine Windows à l’aide de Visual Studio, Windbg ou de l’outil dotnet-dump. Visual Studio et Windbg peuvent analyser du code natif et managé, tandis que dotnet-dump analyse uniquement le code managé.

Notes

Visual Studio version 16.8 et ultérieure vous permet d’ouvrir et d’analyser les vidages Linux générés sur .NET Core 3.1.7 ou version ultérieure.

  • Visual Studio - Consultez le guide de débogage de vidage Visual Studio.
  • Windbg : vous pouvez déboguer des vidages Linux sur windbg à l’aide des mêmes instructions que celles que vous utiliseriez pour déboguer un vidage en mode utilisateur Windows. Utilisez la version x64 de windbg pour les vidages collectés à partir d’un environnement Linux x64 ou Arm64 et la version x86 pour les vidages collectés à partir d’un environnement Linux x86.
  • dotnet-dump : affichez le vidage à l’aide de la commande dotnet-dump analyze. Utilisez la version x64 de dotnet-dump pour les vidages collectés à partir d’un environnement Linux x64 ou Arm64 et la version x86 pour les vidages collectés à partir d’un environnement Linux x86.

Voir aussi