Déboguer .NET Core sur Linux à l’aide de SSH en l’attachant à un processus

À partir de Visual Studio 2017, vous pouvez attacher des processus .NET Core et .NET 5+ s'exécutant sur un déploiement Linux local ou distant via Secure Shell (SSH). Cet article explique comment configurer le débogage et comment déboguer. Pour les scénarios de débogage à l’aide de conteneurs Docker, consultez Attacher à un processus en cours d’exécution sur un conteneur Docker et les articles Outils de conteneur à la place. Pour déboguer Linux sur WSL 2 à partir de Visual Studio (sans attachement au processus), consultez Déboguer des applications .NET Core dans WSL 2 avec Visual Studio.

Notes

Pour le débogage de Linux s’exécutant sur Azure Kubernetes Service (AKS), Bridge to Kubernetes est recommandé au lieu de l’attachement au processus.

Prérequis

  • Sur le serveur Linux, vous devez installer le serveur SSH, le décompresser et l’installer avec curl ou wget. Par exemple, sur Ubuntu, vous pouvez le faire en exécutant :

    sudo apt-get install openssh-server unzip curl
    

    SFTP doit être activé, ainsi que SSH. La plupart des distributions SSH installent et activent SFTP par défaut, mais ce n’est pas toujours le cas.

  • Sur le serveur Linux, installez le runtime .NET sur Linux et recherchez la page correspondant à votre distribution Linux (par exemple Ubuntu). Le SDK .NET n’est pas obligatoire.

  • Pour obtenir des instructions ASP.NET Core complètes, consultez Héberger ASP.NET Core sur Linux avec Nginx et Héberger ASP.NET Core sur Linux avec Apache.

Préparer votre application en vue de son débogage

Pour préparer l’application au débogage :

  • Envisagez d’utiliser une configuration de débogage lorsque vous générez l’application. Il est beaucoup plus difficile de déboguer du code compilé pour la publication (configuration de production) que du code compilé par débogage. Si vous devez utiliser une configuration de production, commencez par désactiver Uniquement mon code. Pour désactiver ce paramètre, choisissez Outils>Options>Débogage, puis désélectionnez Activer Uniquement mon code.
  • Assurez-vous que votre projet est configuré pour produire des fichiers PDB portables (paramètre par défaut), et assurez-vous que les PDB se trouvent au même emplacement que la DLL. Pour configurer cela dans Visual Studio, cliquez avec le bouton droit sur le projet, puis choisissez Propriétés>Général>Symboles de débogage.
  • Assurez-vous que votre projet est configuré pour produire des fichiers PDB portables (paramètre par défaut), et assurez-vous que les PDB se trouvent au même emplacement que la DLL. Pour configurer cela dans Visual Studio, cliquez avec le bouton droit sur le projet, puis choisissez Propriétés>Générer>Avancé>Informations de débogage.

Générer et déployer l’application

Vous pouvez utiliser plusieurs méthodes pour déployer l’application avant le débogage. Par exemple, vous pouvez :

  • Copiez les sources sur l’ordinateur cible et générez avec dotnet build sur la machine Linux.

  • Générez l’application sur Windows, puis transférez les artefacts de build vers la machine Linux. (Les artefacts de build se composent de l’application elle-même, des bibliothèques de runtime dont elle peut dépendre, des PDB portables et du fichier .deps.json.)

Lorsque l’application est déployée, démarrez l’application.

Attacher le débogueur

Lorsque l’application s’exécute sur la machine Linux, vous êtes prêt à attacher le débogueur.

  1. Dans Visual Studio, choisissez Déboguer>Attacher au processus....

  2. Dans la liste Type de connexion, sélectionnez SSH.

  3. Remplacez la Cible de connexion par l’adresse IP ou le nom d’hôte de l’ordinateur cible.

    Si vous n’avez pas encore fourni d’informations d’identification, vous serez invité à entrer un mot de passe et/ou un fichier de clé privée.

    Il n’existe aucune configuration de port requise, à l’exception du port sur lequel le serveur SSH s’exécute.

  4. Recherchez le processus que vous souhaitez déboguer.

    Votre code s’exécute soit dans un nom de processus unique, soit dans un processus nommé dotnet. Pour trouver le processus qui vous intéresse, consultez la colonne Titre, qui affiche les arguments de ligne de commande pour le processus.

    Dans l’exemple suivant, la liste des processus d’une machine Linux distante via un transport SSH s’affiche dans la boîte de dialogue Attacher au processus.

    Attach to Linux process

  5. Choisissez Attacher.

  6. Dans la boîte de dialogue qui s’affiche, sélectionnez le type de code que vous souhaitez déboguer. Choisissez Managé (.NET Core pour Unix).

  7. Utilisez les fonctionnalités de débogage de Visual Studio pour déboguer l’application.

    Dans l’exemple suivant, vous voyez le débogueur Visual Studio arrêté à un point d’arrêt dans le code s’exécutant sur une machine Linux distante.

    Hit a breakpoint