Partage via


Tutoriel : Déboguer C# et 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, appelée débogage en mode mixte. Dans ce tutoriel, vous allez apprendre à déboguer du code managé et natif dans une seule session de débogage.

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

Dans ce tutoriel, vous allez :

  • 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
  • Pas à pas dans le code natif

Conditions préalables

Visual Studio doit être installé avec les charges de travail suivantes :

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

Visual Studio doit être installé avec les charges de travail suivantes :

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

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

Si Visual Studio est installé, mais que vous n’avez pas les charges de travail dont vous avez besoin, sélectionnez Ouvrir visual Studio Installer dans le volet gauche de la boîte de dialogue Nouveau projet Nouveau projet. Dans Visual Studio Installer, sélectionnez les charges de travail dont vous avez besoin, puis sélectionnez Modifier.

Créer une DLL native simple

Pour créer les fichiers du projet 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 Projet vide pour C++. Dans la boîte de dialogue qui s’affiche, choisissez Créer. Ensuite, tapez un nom tel que Mixed_Mode_Debugging, puis cliquez sur Créer.

    Si vous ne voyez pas le modèle de projet Projet vide, accédez à Outils>Obtenir des outils et des fonctionnalités..., ce qui ouvre l'Installateur Visual Studio. Le programme d’installation de Visual Studio démarre. Choisissez la charge de travail Développement Desktop en C++, puis choisissez Modifier.

    Visual Studio crée le projet.

  2. Dans explorateur de solutions, sélectionnez fichiers sources, puis Projet>Ajouter un nouvel élément. Vous pouvez également 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 Explorateur de solutions, sélectionnez Fichiers d’en-tête, puis Projet>Ajouter un nouvel élément. Vous pouvez également 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 Visual Studio, sélectionnez Debug configuration et 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 Explorateur de solutions, sélectionnez le nœud de 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, puis sélectionnez Propriétés.

  3. En haut du volet Propriétés , vérifiez que la configuration est définie sur Active(Debug) et que la plateforme est identique à celle que vous avez définie dans la barre d’outils : x64ou Win32 pour la plateforme x86.

    Important

    Si vous passez de x86 à x64 ou inversement, vous devez reconfigurer les propriétés de 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 deviez le modifier en Non, sélectionnez Appliquer.

  5. Sous Propriétés de configuration, sélectionnez général, puis, dans la liste déroulante en regard de type de configuration, sélectionnez bibliothèque dynamique (.dll). Sélectionnez Appliquer, puis sélectionnez OK.

    basculer vers une DLL native

  6. Sélectionnez le projet dans Explorateur de solutions, puis choisissez Générer>Générer la solution, appuyez sur F7, ou faites un clic droit sur le projet et sélectionnez Générer.

    Le projet devrait être construit sans erreurs.

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 ou Console App (.NET Framework) pour C#. Dans la boîte de dialogue qui s’affiche, choisissez Suivant.

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

    Pour .NET Core, choisissez l’infrastructure cible recommandée ou .NET 8, puis choisissez Créer.

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

    Note

    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 dans 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 d’accès du fichier dans [DllImport] par le chemin d’accès de votre fichier au Mixed_Mode_Debugging.dll que vous venez de créer. Consultez le commentaire de code pour obtenir des indicateurs. 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 Explorateur de solutions, sélectionnez le nœud de 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, puis sélectionnez Propriétés.

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

    code .NET

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

    Activer le débogage en mode mixte

    code .NET Framework

    Dans le menu de gauche, sélectionnez Debug. Ensuite, dans la section moteurs de débogueur, sélectionnez la propriété Activer le débogage du code natif, puis fermez la page des propriétés pour enregistrer les modifications.

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

    Activer le débogage en mode mixte

  3. Si vous ciblez une DLL x64 à partir d’une application .NET Framework, changez la cible de plateforme de Any CPU à x64. Pour ce faire, vous devrez peut-être sélectionner Configuration Manager dans la liste déroulante Plateforme de solutions de la barre d’outils Debug. 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 dans la marge gauche où vous définissez le point d’arrêt.

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

    Le débogueur s’interrompt sur le point d’arrêt que vous définissez. 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.

    Pas à pas dans le code natif

    Pas à pas dans le code natif

  2. À présent, vous pouvez définir et atteindre des points d’arrêt et inspecter des variables dans le code natif ou managé.

    • Pointez sur les variables dans le code source pour afficher leurs valeurs.

    • Examinez les variables et leurs valeurs dans les fenêtres Autos et Locals.

    • 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 tutoriel, vous avez appris à déboguer du code natif à partir d’une application managée en activant le débogage en mode mixte. Pour obtenir une vue d’ensemble des autres fonctionnalités du débogueur, consultez :