Partager via


Utilisation de Visual Studio Code pour déboguer des applets de commande compilées

Ce guide vous montre comment déboguer de manière interactive du code source C# pour un module PowerShell compilé à l’aide de Visual Studio Code (VS Code) et de l’extension C#.

Cet article suppose que vous êtes familiarisé avec le débogueur Visual Studio Code.

Ce guide suppose que vous avez lu et suivi les instructions du guide Rédaction de modules portables.

Création d’une tâche de construction

Générez automatiquement votre projet avant de lancer une session de débogage. Le fait de regénérer le projet vous permet de déboguer la version la plus récente de votre code.

Configurer une tâche de génération :

  1. Dans la palette de commandes , exécutez la commande Configurer la tâche de génération par défaut.

    Exécuter la configuration de la tâche de génération par défaut

  2. Dans la boîte de dialogue Sélectionner une tâche pour configurer, choisissez Créer un fichier tasks.json à partir d’un modèle.

  3. Dans la boîte de dialogue Sélectionner un modèle de tâche, choisissez .NET Core.

Un nouveau fichier tasks.json est créé s’il n’existe pas encore.

Pour tester votre tâche de compilation :

  1. Dans la palette de commandes, exécutez la commande Run Build Task.

  2. Dans la boîte de dialogue Sélectionner la tâche de génération à exécuter, choisissez build.

Informations sur les fichiers DLL verrouillés

Par défaut, une build réussie n’affiche pas la sortie dans le volet terminal. Si vous voyez une sortie contenant le texte Le fichier de projet n'existe pas, vous devez modifier le fichier tasks.json. Ajoutez le chemin explicite au projet C# au format suivant : "${workspaceFolder}/myModule". Dans cet exemple, myModule est le nom du dossier du projet. Cette entrée doit suivre l’entrée build dans la liste args comme suit :

    {
        "label": "build",
        "command": "dotnet",
        "type": "shell",
        "args": [
            "build",
            "${workspaceFolder}/myModule",
            // Ask dotnet build to generate full paths for file names.
            "/property:GenerateFullPaths=true",
            // Do not generate summary otherwise it leads to duplicate errors in Problems panel
            "/consoleloggerparameters:NoSummary",
        ],
        "group": "build",
        "presentation": {
            "reveal": "silent"
        },
        "problemMatcher": "$msCompile"
    }

Lors du débogage, votre DLL de module est importée dans la session PowerShell dans le terminal VS Code. La DLL devient verrouillée. Le message suivant s’affiche lorsque vous exécutez la tâche de génération sans fermer la session de terminal :

Could not copy "obj\Debug\netstandard2.0\myModule.dll" to "bin\Debug\netstandard2.0\myModule.dll"`.

Vous devez fermer les sessions de terminal Server avant de procéder à la regénération.

Configuration du débogueur

Pour déboguer l’applet de commande PowerShell, vous devez configurer une configuration de lancement personnalisée. Cette configuration est utilisée pour :

  • Générer votre code source
  • Démarrer PowerShell avec votre module chargé
  • Laissez PowerShell ouvert dans le volet terminal

Lorsque vous appelez votre applet de commande dans la session de terminal, le débogueur s’arrête à tout point d’arrêt défini dans votre code source.

Configuration de launch.json pour PowerShell

  1. Installer l’extension C# pour Visual Studio Code

  2. Dans le volet Débogage, ajoutez une configuration de débogage

  3. Dans la boîte de dialogue Select environment, choisissez .NET Core

  4. Le fichier launch.json est ouvert dans l’éditeur. Avec votre curseur dans le tableau configurations, vous voyez le sélecteur configuration. Si vous ne voyez pas cette liste, sélectionnez Ajouter une configuration.

  5. Pour créer une configuration de débogage par défaut, sélectionnez Lancer l’application console .NET Core:

    Lancer l’application console .NET Core

  6. Modifiez les champs name, program, argset console comme suit :

     {
         "name": "PowerShell cmdlets: pwsh",
         "type": "coreclr",
         "request": "launch",
         "preLaunchTask": "build",
         "program": "pwsh",
         "args": [
             "-NoExit",
             "-NoProfile",
             "-Command",
             "Import-Module ${workspaceFolder}/myModule/bin/Debug/netstandard2.0/myModule.dll",
         ],
         "cwd": "${workspaceFolder}",
         "stopAtEntry": false,
         "console": "integratedTerminal"
     }
    

Le champ program est utilisé pour lancer pwsh afin que l’applet de commande en cours de débogage puisse être exécutée. L’argument -NoExit empêche la session PowerShell de quitter dès que le module est importé. Le chemin dans l’argument Import-Module est le chemin de sortie de génération par défaut, lorsque vous avez suivi le guide Écriture de modules portables. Si vous avez créé un manifeste de module (fichier.psd1), vous devez utiliser le chemin d’accès à cela à la place. Le séparateur de chemin d’accès / fonctionne sur Windows, Linux et macOS. Vous devez utiliser le terminal intégré pour exécuter les commandes PowerShell que vous souhaitez déboguer.

Remarque

Si le débogueur ne s’arrête pas à des points d’arrêt, recherchez dans la console de débogage Visual Studio Code une ligne qui indique :

Loaded '/path/to/myModule.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.

Si vous voyez cela, ajoutez "justMyCode": false à votre configuration de lancement (au même niveau que "console": "integratedTerminal".

Configuration de launch.json pour Windows PowerShell

Cette configuration de lancement fonctionne pour tester vos applets de commande dans Windows PowerShell (powershell.exe). Créez une deuxième configuration de lancement avec les modifications suivantes :

  1. name doit être PowerShell cmdlets: powershell

  2. type doit être clr

  3. program doit être powershell

    Il doit ressembler à ceci :

     {
         "name": "PowerShell cmdlets: powershell",
         "type": "clr",
         "request": "launch",
         "preLaunchTask": "build",
         "program": "powershell",
         "args": [
             "-NoExit",
             "-NoProfile",
             "-Command",
             "Import-Module ${workspaceFolder}/myModule/bin/Debug/netstandard2.0/myModule.dll",
         ],
         "cwd": "${workspaceFolder}",
         "stopAtEntry": false,
         "console": "integratedTerminal"
     }
    

Lancement d’une session de débogage

À présent, tout est prêt pour le débogage.

Vous pouvez parcourir le code source, inspecter les variables et inspecter la pile des appels.

Pour terminer le débogage, cliquez sur Arrêter dans la barre d’outils de débogage ou appuyez sur Maj+F5. L’interpréteur de commandes utilisé pour le débogage se ferme et retire le verrou appliqué au fichier DLL compilé.