Débogage de projets DLL à partir de Visual StudioDebugging DLL projects from Visual Studio

Les modèles Visual Studio suivants créent des DLL :The following Visual Studio templates create DLLs:

  • (C++, C# et Visual Basic) : bibliothèque de classes(C++, C#, and Visual Basic) Class Library

  • (C++) : projet de DLL de Console Win32(C++): Win32 Console DLL project

    Pour plus d'informations, consultez MFC Debugging Techniques.For more information, see MFC Debugging Techniques.

  • (C++, C# et Visual Basic) : bibliothèque de contrôles Windows Forms(C++, C#, and Visual Basic): Windows Forms Control Library

    Débogage d’une bibliothèque de contrôles Windows Forms est semblable au débogage d’un projet de bibliothèque de classes.Debugging a Windows Forms Control Library is similar to debugging a Class Library project. Dans la plupart des cas, vous appelez le contrôle Windows à partir d'un autre projet.In most cases, you will call the Windows control from another project. Lorsque vous déboguez le projet appelant, vous pouvez exécuter pas à pas le code de votre contrôle Windows, définir des points d'arrêt et effectuer d'autres opérations de débogage.When you debug the calling project, you can step into the code of your Windows control, set breakpoints, and perform other debugging operations. Pour plus d'informations, consultez Contrôles Windows Forms.For more information, see Windows Forms Controls.

Building a debug versionBuilding a debug version

Quelle que soit la façon dont vous démarrez le débogage, vérifiez que vous générez d'abord la version Debug de la DLL et que celle-ci se trouve à l'emplacement attendu par l'application.No matter how you start debugging, make sure that you build the Debug version of the DLL first and make sure that the Debug version is in the location where the application expects to find it. Cette étape semble évidente mais si vous l'omettez, l'application peut rechercher et charger une autre version de la DLL.This may seem obvious, but if you forget this step, the application might find a different version of the DLL and load it. Le programme continuera alors de s'exécuter, et vous vous demanderez pourquoi votre point d'arrêt n'a pas été atteint.The program will then continue to run, while you wonder why your breakpoint was never hit. Durant le processus de débogage, vous pouvez vérifier quelles DLL ont été chargées par votre programme en ouvrant la fenêtre Modules du débogueur.When you are debugging, you can verify which DLLs your program has loaded by opening the debugger's Modules window. La fenêtre Modules répertorie chaque DLL ou EXE chargé au cours du processus de débogage.The Modules window lists each DLL or EXE loaded in the process you are debugging. Pour plus d'informations, consultez How to: Use the Modules Window.For more information, see How to: Use the Modules Window.
Pour que le débogueur s'attache au code écrit en C++, le code doit émettre DebuggableAttribute.For the debugger to attach to code written in C++, the code must emit DebuggableAttribute. Vous pouvez ajouter cela automatiquement à votre code grâce à la liaison, à l'aide de l'option /ASSEMBLYDEBUG .You can add this to your code automatically by linking with the /ASSEMBLYDEBUG linker option.

Mixed-Mode debuggingMixed-Mode debugging

L'application appelante qui appelle votre DLL peut être écrite en code managé ou natif.The calling application that calls your DLL can be written in managed code or native code. Si votre DLL managée est appelée par du code natif et que vous souhaitez déboguer les deux types de code, vous devez activer les débogueurs managés et natifs.If your managed DLL is called by native code and you want to debug both, managed and native debuggers must both be enabled. Vous pouvez sélectionner ceci dans le <projet > Pages de propriétés boîte de dialogue ou la fenêtre.You can select this in the <Project> Property Pages dialog box or window. Tout dépend si vous avez démarré le débogage à partir du projet DLL ou du projet de l'application appelante.How you do this depends on whether you start debugging from the DLL project or the calling application project. Pour plus d'informations, consultez How to: Debug in Mixed Mode.For more information, see How to: Debug in Mixed Mode.

Changing default configurationsChanging default configurations

Lorsque vous créez un projet d'application console à l'aide du modèle de projet, Visual StudioVisual Studio crée automatiquement les paramètres requis pour les configurations Debug et Release.When you create a console application project with the project template, Visual StudioVisual Studio automatically creates required settings for the Debug and Release configurations. Si nécessaire, vous pouvez modifier ces paramètres.If necessary, you can change those settings. Pour plus d’informations, consultez paramètres de projet pour une Configuration Debug C++, des paramètres de projet pour les Configurations Debug c#, paramètres de projet pour une Configuration Debug Visual Basic , et Comment : jeu de Configurations Debug et Release.For more information, see Project Settings for a C++ Debug Configuration, Project Settings for C# Debug Configurations, Project Settings for a Visual Basic Debug Configuration, and How to: Set Debug and Release Configurations.

Ways to debug the DLLWays to debug the DLL

Chacun des projets de cette section crée une DLL.Each of the projects in this section creates a DLL. Vous ne pouvez pas exécuter une DLL directement, celle-ci doit être appelée par une application, généralement un EXE.You cannot run a DLL directly; it must be called by an application, usually an EXE. Pour plus d'informations, consultez Creating and Managing Visual C++ Projects.For more information, see Creating and Managing Visual C++ Projects. L'application appelante peut satisfaire un des critères suivants :The calling application might fit any one of the following criteria:

  • Une application générée dans un autre projet de la même solution Visual StudioVisual Studio qui contient la bibliothèque de classes.An application built in another project in the same Visual StudioVisual Studio solution that contains the class library.

  • Une application existante déjà déployée sur un ordinateur de test ou de production.An existing application already deployed on a test or production computer.

  • Située sur le Web et accessible via une URL.Located on the Web and accessed through a URL.

  • Une application Web qui contient une page Web incorporant la DLL.A Web application that contains a Web page which embeds the DLL.

Debugging the calling applicationDebugging the calling application

Pour déboguer une DLL, commencez par déboguer l'application appelante, en général il s'agit d'un EXE ou d'une application Web.To debug a DLL, start by debugging the calling application, typically either an EXE or a Web application. Pour cela, différentes possibilités s'offrent à vous.There are several ways to debug it.

  • Si vous disposez d'un projet pour l'application appelante, vous pouvez ouvrir ce projet et démarrer l'exécution à partir du menu Debug .If you have a project for the calling application, you can open that project and start execution from the Debug menu. Pour plus d’informations, consultez mise en route avec le débogueur.For more information, see Getting started with the debugger.

  • Si l'application appelante est un programme existant déjà déployé sur un ordinateur de test ou de production et qu'elle est en cours d'exécution, vous pouvez y attacher le débogueur.If the calling application is an existing program already deployed on a test or production computer and is already running you can attach to it. Utilisez cette méthode si la DLL est un contrôle hébergé par Internet Explorer ou un contrôle sur une page Web.Use this method if the DLL is a control hosted by Internet Explorer, or a control on a Web page. Pour plus d'informations, consultez How to: Attach to a Running Process.For more information, see How to: Attach to a Running Process.

  • Vous pouvez la déboguer à partir du projet de DLL.You can debug it from the DLL project. Pour plus d'informations, consultez How to: Debug from a DLL Project.For more information, see How to: Debug from a DLL Project.

  • Vous pouvez la déboguer à partir de la Visual StudioVisual Studio fenêtre exécution.You can debug it from the Visual StudioVisual Studio Immediate window. Dans ce cas, la fenêtre Exécution joue le rôle de l'application.In this case, the Immediate window plays the role of the application.

Avant de commencer le débogage de l'application appelante, vous devez généralement définir un point d'arrêt dans la bibliothèque de classes.Before you start debugging the calling application, you will usually want to set a breakpoint in the class library. Pour plus d’informations, consultez Using Breakpoints.For more information, see Using Breakpoints. Lorsque le point d'arrêt est atteint, vous pouvez exécuter le code pas à pas, en observant chaque action ligne par ligne, jusqu'à ce que vous ayez isolé le problème.When the breakpoint is hit, you can step through the code, observing the action at each line, until you isolate the problem. Pour plus d’informations, consultez parcourir le code dans le débogueur.For more information, see Navigate code in the debugger.

La fenêtre ExécutionThe Immediate Window

Vous pouvez évaluer les fonctions ou les méthodes dans la DLL sans application appelante.You can evaluate functions or methods in the DLL without having a calling application. Effectuez le débogage au moment du design et utilisez la fenêtre Exécution .You do design-time debugging and you use the Immediate window. Pour ce type de débogage, suivez la procédure ci-dessous pendant l'ouverture du projet DLL :To debug in this manner, do the follow these steps while the DLL project is open:

  1. Ouvrez la fenêtre Exécution du débogueur.Open the Debugger Immediate window.

  2. Pour tester une méthode appelée Test dans une classe Class1, instanciez un objet de type Class1 en tapant le code C# suivant dans la fenêtre Exécution.To test a method named Test in class Class1, instantiate an object of type Class1 by typing the following C# code in the Immediate window. Ce code managé fonctionne pour Visual Basic et C++, avec les modifications de syntaxe appropriées :This managed code works for Visual Basic and C++, with appropriate syntax changes:

    Class1 obj = new Class1();  
    

    En C#, tous les noms doivent être qualifiés complets.In C#, all names must be fully qualified. De plus, toutes les méthodes ou variables doivent être dans la portée et le contexte actuels de la session de débogage.In addition, any methods or variables must be in the current scope and context of the debugging session.

  3. En supposant que Test nécessite un paramètre int , évaluez Test à l'aide de la fenêtre Exécution :Assuming that Test takes one int parameter, evaluate Test using the Immediate window:

    ?obj.Test(10)  
    

    Le résultat sera imprimé dans la fenêtre Exécution .The result will be printed in the Immediate window.

  4. Vous pouvez continuer à déboguer Test en y insérant un point d'arrêt, puis en réévaluant la fonction :You can continue to debug Test by placing a breakpoint inside it and then evaluating the function again:

    ?obj.Test(10);  
    

    Une fois le point d'arrêt atteint, vous pourrez exécuter Testpas à pas.The breakpoint will be hit and you will be able to step through Test. Lorsque l'exécution aura quitté Test, le débogueur repassera en mode Design.After execution has left Test, the Debugger will be back in Design mode.

Déboguer une DLL externe à partir d’un projet C++Debug an external DLL from a C++ project

Si vous déboguez une DLL externe à votre projet, les fonctionnalités de débogage disponibles (par exemple, le parcours du code) dépend de la configuration debug de la DLL lorsqu’il a été créé et si le fichier .pdb et autres fichiers requis pour la DLL sont disponibles.If you are debugging a DLL external to your project, the debugging features available (such as stepping through code) will depend on the debug configuration of the DLL when it was built and whether the .pdb file and other required files for the DLL are available.

Votre projet doit être en mesure de trouver la DLL et le fichier .pdb utilisé pour le débogage.Your project needs to be able to find the DLL and the .pdb file used for debugging. Vous pouvez créer une tâche de génération personnalisée pour copier ces fichiers à la <dossier du projet > \Debug dossier de sortie, ou vous pouvez copier les fichiers dans le dossier de sortie manuellement.You can create a custom build task to copy these files to the <project folder>\Debug output folder, or you can copy the files into the output folder manually.

Vous pouvez facilement définir des emplacements de fichiers d’en-tête et fichiers de *.lib dans les Pages de propriétés (cliquez sur le projet C++ et choisissez afficher les propriétés, puis choisissez toutes les Configurations) sans avoir à copier les dans votre dossier de sortie :You can easily set locations of header files and *.lib files in the Property Pages (right-click the C++ project and choose View Properties, and then choose All Configurations) without the need to copy them into your output folder:

  • Dossier C/C++ (catégorie Général) - spécifiez le dossier contenant les fichiers d’en-tête dans le autres répertoires Include champ.C/C++ folder (General category) - Specify the folder containing header files in the Additional Include Directories field.
  • Dossier de l’éditeur de liens (catégorie Général) - spécifiez le dossier contenant le fichier .lib dans les répertoires de bibliothèques supplémentaires champ.Linker folder (General category) - Specify the folder containing the .lib file in the Additional Libraries Directories field.
  • Dossier de l’éditeur de liens (catégorie d’entrée) : spécifiez le chemin d’accès complet et le nom du fichier .lib dans les dépendances supplémentaires champ.Linker folder (Input category) - Specify the full path and filename for the .lib file in the Additional Dependencies field.

Lors de la configuration est correcte, vous pouvez déboguer en début de l’exécution à partir de la déboguer menu.When the configuration is correct, you can debug by starting execution from the Debug menu.

Pour plus d’informations sur les paramètres du projet, consultez Pages de propriétés (Visual C++).For more information on project settings, see Property Pages (Visual C++).

Voir aussiSee Also

Débogage du code managé Debugging Managed Code
Types de projets Visual C++ Visual C++ Project Types
Types de projets C#, F# et Visual Basic C#, F#, and Visual Basic Project Types
Paramètres de projet pour une Configuration de débogage C++ Project Settings for a C++ Debug Configuration
Paramètres de projet pour des configurations Debug C# Project Settings for C# Debug Configurations
Paramètres de projet pour une configuration Debug Visual Basic Project Settings for a Visual Basic Debug Configuration
Sécurité du débogueurDebugger Security