Partager via


Tutoriel : Déboguer du code C# et du code C++ dans la même session de débogage

Visual Studio vous permet d’activer plusieurs types de débogueur dans une session de débogage, qui est appelée « débogage en mode mixte ». Dans ce tutoriel, vous découvrez comment déboguer du code managé et du code natif dans une même session de débogage.

Ce tutoriel montre comment déboguer le code natif d’une application managée, mais vous pouvez également déboguer le code managé d’une application native. Le débogueur prend également en charge d’autres types de débogage en mode mixte, comme le débogage de code Python et de code natif, ainsi que l’utilisation du débogueur de script dans des types d’applications comme ASP.NET.

Ce didacticiel présente les procédures suivantes :

  • Créer une DLL native simple
  • Créer une application .NET Core ou .NET Framework simple pour appeler la DLL
  • Configurer le débogage en mode mixte
  • Démarrer le débogueur
  • Atteindre un point d’arrêt dans l’application managée
  • Effectuer un pas à pas détaillé dans le code natif

Prérequis

Vous devez disposer de Visual Studio avec les charges de travail suivantes :

  • Développement Desktop en C++
  • Développement .NET Desktop

Vous devez disposer de Visual Studio avec les charges de travail suivantes :

  • Développement Desktop en C++
  • Développement .NET Desktop ou Développement multiplateforme .NET Core, selon le type d’application que vous voulez créer.

Si vous n’avez pas Visual Studio, accédez à la page Téléchargements de Visual Studio pour l’installer gratuitement.

Si vous disposez d’une version installée de Visual Studio, mais que vous n’avez pas les charges de travail nécessaires, sélectionnez Ouvrir Visual Studio Installer dans le volet gauche de la boîte de dialogue Nouveau projet. Dans Visual Studio Installer, sélectionnez les charges de travail nécessaires, puis sélectionnez Modifier.

Créer une DLL native simple

Pour créer les fichiers du projet de DLL :

  1. Ouvrez Visual Studio et créez un projet.

    Appuyez sur Échap pour fermer la fenêtre de démarrage. Tapez Ctrl+Q pour ouvrir la zone de recherche, tapez Projet vide, choisissez Modèles, puis choisissez Projet vide pour C++. Dans la boîte de dialogue qui apparaît, choisissez Créer. Ensuite, tapez un nom comme Mixed_Mode_Debugging, puis cliquez sur Créer.

    Si vous ne voyez pas le modèle de projet Projet vide, accédez à Outils>Obtenir les outils et fonctionnalités..., qui ouvre Visual Studio Installer. Visual Studio Installer est lancé. Choisissez la charge de travail Développement Desktop en C++, puis choisissez Modifier.

    Visual Studio crée le projet.

  2. Dans l’Explorateur de solutions, sélectionnez Fichiers sources, puis sélectionnez Projet>Ajouter un nouvel élément. Vous pouvez aussi cliquer avec le bouton droit sur Fichiers sources et sélectionner Ajouter>Nouvel élément.

    Si vous ne voyez pas tous les modèles d’élément, choisissez Afficher tous les modèles.

  3. Dans la boîte de dialogue Nouvel élément, sélectionnez Fichier C++ (.cpp). Tapez Mixed_Mode.cpp dans le champ Nom, puis sélectionnez Ajouter.

    Visual Studio ajoute le nouveau fichier C++ à l’Explorateur de solutions.

  4. Copiez le code suivant dans Mixed_Mode.cpp :

    #include "Mixed_Mode.h"
    
  5. Dans l’Explorateur de solutions, sélectionnez Fichiers d’en-tête, puis sélectionnez Projet>Ajouter un nouvel élément. Vous pouvez aussi cliquer avec le bouton droit sur Fichiers d’en-tête et sélectionner Ajouter>Nouvel élément.

    Si vous ne voyez pas tous les modèles d’élément, choisissez Afficher tous les modèles.

  6. Dans la boîte de dialogue Nouvel élément, sélectionnez Fichier d’en-tête (.h). Tapez Mixed_Mode.h dans le champ Nom, puis sélectionnez Ajouter.

    Visual Studio ajoute le nouveau fichier d’en-tête à l’Explorateur de solutions.

  7. Copiez le code suivant dans Mixed_Mode.h :

    #ifndef MIXED_MODE_MULTIPLY_HPP
    #define MIXED_MODE_MULTIPLY_HPP
    
    extern "C"
    {
      __declspec(dllexport) int __stdcall mixed_mode_multiply(int a, int b) {
        return a * b;
      }
    }
    #endif
    
  8. Sélectionnez Fichier>Enregistrer tout ou appuyez sur Ctrl+Maj+S pour enregistrer les fichiers.

Pour configurer et générer le projet DLL :

  1. Dans la barre d’outils de Visual Studio, sélectionnez la configuration Débogage et la plateforme x86 ou x64. Si votre application appelante est .NET Core, qui s’exécute toujours en mode 64 bits, sélectionnez x64 comme plateforme.

  2. Dans l’Explorateur de solutions, sélectionnez le nœud du projet Mixed_Mode_Debugging et sélectionnez l’icône Propriétés, ou cliquez avec le bouton droit sur le nœud du projet et sélectionnez Propriétés.

  3. En haut du volet Propriétés, vérifiez que Configuration est défini sur Active (Déboguer) et que la Plateforme est identique à ce que vous avez défini dans la barre d’outils : x64, ou Win32 pour la plateforme x86.

    Important

    Si vous faites passer la plateforme de x86 à x64 ou vice versa, vous devez reconfigurer les propriétés pour la nouvelle plateforme.

  4. Sous Propriétés de configuration dans le volet gauche, sélectionnez Éditeur de liens>Avancé et, dans la liste déroulante en regard de Aucun point d’entrée, sélectionnez Non. Si vous avez dû le changer en Non, sélectionnez Appliquer.

  5. Sous Propriétés de configuration, sélectionnez Général et, dans la liste déroulante en regard de Type de configuration, sélectionnez Bibliothèque dynamique (.dll). Sélectionnez Apply (Appliquer), puis OK.

    Switch to a native DLL

  6. Sélectionnez le projet dans l’Explorateur de solutions, puis sélectionnez Générer>Générer la solution, appuyez sur F7, ou cliquez avec le bouton droit sur le projet et sélectionnez Générer.

    Le projet doit être généré sans erreur.

Créer une application managée simple pour appeler la DLL

  1. Ouvrez Visual Studio et créez un projet.

    Appuyez sur Échap pour fermer la fenêtre de démarrage. Tapez Ctrl+Q pour ouvrir la zone de recherche, tapez console, choisissez Modèles, puis choisissez Application console pour .NET Core or Application console (.NET Framework) pour C#. Dans la boîte de dialogue qui apparaît, choisissez Suivant.

    Ensuite, tapez un nom comme Mixed_Mode_Calling_App, puis cliquez sur Suivant ou Créer, selon l’option disponible.

    Pour .NET Core, choisissez le framework cible recommandé ou .NET 8, puis choisissez Créer.

    Si vous ne voyez pas le modèle de projet approprié, accédez à Outils>Obtenir les outils et fonctionnalités..., qui ouvre Visual Studio Installer. Choisissez la charge de travail .NET appropriée comme décrit dans les prérequis, puis choisissez Modifier.

    Notes

    Vous pouvez également ajouter le nouveau projet managé à votre solution C++ existante. Nous créons le projet dans une nouvelle solution pour rendre la tâche de débogage en mode mixte plus difficile.

    Visual Studio crée le projet vide et l’affiche dans l’Explorateur de solutions.

  2. Remplacez tout le code de Program.cs par le code suivant :

    using System;
    using System.Runtime.InteropServices;
    
    namespace Mixed_Mode_Calling_App
    {
        public class Program
        {
            // Replace the file path shown here with the
            // file path on your computer. For .NET Core, the typical (default) path
            // for a 64-bit DLL might look like this:
            // C:\Users\username\source\repos\Mixed_Mode_Debugging\x64\Debug\Mixed_Mode_Debugging.dll
            // Here, we show a typical path for a DLL targeting the **x86** option.
            [DllImport(@"C:\Users\username\source\repos\Mixed_Mode_Debugging\Debug\Mixed_Mode_Debugging.dll", EntryPoint =
            "mixed_mode_multiply", CallingConvention = CallingConvention.StdCall)]
            public static extern int Multiply(int x, int y);
            public static void Main(string[] args)
            {
                int result = Multiply(7, 7);
                Console.WriteLine("The answer is {0}", result);
                Console.ReadKey();
            }
        }
    }
    
  3. Dans le nouveau code, remplacez le chemin de fichier dans [DllImport] par votre chemin de fichier vers Mixed_Mode_Debugging.dll que vous venez de créer. Consultez le commentaire du code pour des conseils. Veillez à remplacer l’espace réservé username (nom d’utilisateur).

  4. Sélectionnez Fichier>Enregistrer Program.cs ou appuyez sur Ctrl+S pour enregistrer le fichier.

Configurer le débogage en mode mixte

  1. Dans l’Explorateur de solutions, sélectionnez le nœud du projet Mixed_Mode_Calling_App et sélectionnez l’icône Propriétés, ou cliquez avec le bouton droit sur le nœud du projet et sélectionnez Propriétés.

  2. Activez le débogage de code natif dans les propriétés.

    Sélectionnez Déboguer dans le volet gauche, sélectionnez l’interface utilisateur Ouvrir les profils de lancement de débogage, cochez la case Activer le débogage du code natif, puis fermez la page des propriétés pour enregistrer les modifications. Enable mixed mode debugging

    Sélectionnez Déboguer dans le volet gauche, cochez la case Activer le débogage du code natif, puis fermez la page des propriétés pour enregistrer les modifications.

    Enable mixed mode debugging

  3. Si vous ciblez une DLL x64 à partir d’une application .NET Framework, remplacez la cible de la plateforme de N’importe quel processeur par x64. Pour ce faire, vous devrez peut-être sélectionner Configuration Manager dans la liste déroulante Plateforme de solution de la barre d’outils Débogage. Ensuite, si vous ne pouvez pas basculer directement vers x64, créez une Nouvelle configuration qui cible x64.

Définir un point d’arrêt et démarrer le débogage

  1. Dans le projet C#, ouvrez Program.cs. Définissez un point d’arrêt sur la ligne de code suivante en cliquant dans la marge de gauche, en sélectionnant la ligne et en appuyant sur F9, ou en cliquant avec le bouton droit sur la ligne et en sélectionnant Point d’arrêt>Insérer un point d’arrêt.

    int result = Multiply(7, 7);
    

    Un cercle rouge apparaît là dans la marge gauche où vous avez défini le point d’arrêt.

  2. Appuyez sur F5, sélectionnez la flèche verte dans la barre d’outils de Visual Studio, ou sélectionnez Déboguer>Démarrer le débogage pour démarrer le débogage.

    Le débogueur se met en pause sur point d’arrêt que vous avez défini. Une flèche jaune indique l’endroit où le débogueur est actuellement en pause.

Effectuer un pas à pas détaillé et un pas à pas sortant du code natif

  1. Avec le débogage en pause dans l’application managée, appuyez sur F11 ou sélectionnez Déboguer>Pas à pas détaillé.

    Le fichier d’en-tête natif Mixed_Mode.h s’ouvre et vous voyez la flèche jaune où le débogueur est en pause.

    Step into native code

    Step into native code

  2. Vous pouvez maintenant définir et atteindre des points d’arrêt, et inspecter les variables dans le code natif ou dans le code managé.

    • Placez le curseur sur des variables dans le code source pour voir leur valeur.

    • Examinez des variables et leur valeur dans les fenêtres Automatique et Variables locales.

    • Avec le débogueur en pause, vous pouvez également utiliser la fenêtre Espion et la fenêtre Pile des appels.

  3. Appuyez à nouveau sur F11 pour faire avancer le débogueur d’une ligne.

  4. Appuyez sur Maj+F11 ou sélectionnez Déboguer>Pas à pas sortant pour continuer l’exécution et placer à nouveau le débogueur en pause dans l’application managée.

  5. Appuyez sur F5 ou sélectionnez la flèche verte pour continuer le débogage de l’application.

Félicitations ! Vous avez terminé le didacticiel sur le débogage en mode mixte.

Étape suivante

Dans ce didacticiel, vous avez découvert comment déboguer du code natif à partir d’une application managée en activant le débogage en mode mixte. Pour une vue d’ensemble des autres fonctionnalités du débogueur, consultez :