Comment déboguer un dll référencé (ayant pdb)

Ma question concerne Visual Studio 2008, même si je suppose que cela devrait être la même chose dans VS2005

J’ai deux solutions dans mon espace de travail, disons A et B.

La solution A est un projet plus ancien que j’ai fini de coder il y a quelque temps. Dans la solution B, je dois utiliser certaines classes de la solution A. Pour ce faire, j’ajoute une référence à la DLL d’un des projets de la solution A.

Le problème est quand j’essaie de déboguer. Je veux aussi pouvoir entrer dans le code de A. Visual Studio ne peut pas charger le code pour ces classes (“Il n’y a pas de code source disponible pour l’emplacement actuel”) et je ne peux voir que le désassemblage, ce qui n’est pas utile.

La seule façon de déboguer des classes de la solution A est d’exécuter la solution B, de détacher tous les processus (dans l’élément de menu Débogage) et de joindre le processus à partir de la solution A.

Cependant, cela est très gênant et je ne peux que déboguer A OR B à la fois.

Y a-t-il un moyen de permettre d’entrer dans le code des dll référencées (pour lesquelles j’ai le code source)?


Solution: Mon erreur était que je pensais qu’un projet ne pouvait faire partie que d’une seule solution. En fait, un projet peut faire partie d’un nombre quelconque de solutions.
Lorsque vous devez référencer l’ancien projet, vous devez simplement append le projet à la solution. Cela se fait en cliquant avec le bouton droit sur la nouvelle solution dans l’Explorateur de solutions> Ajouter> Projet existant.
Ensuite, vous pourrez append la référence du projet. Comme d’autres l’ont écrit, vous devriez probablement éviter complètement d’utiliser des références à votre propre code (ou un autre code que vous pourriez avoir besoin de modifier et de déboguer).

Une très bonne référence à la manière dont les solutions doivent être conçues peut être trouvée dans MSDN .

Si vous avez une référence de projet , cela devrait fonctionner immédiatement.

S’il s’agit d’une référence de fichier (dll), les symboles de débogage (le fichier “pdb”) doivent se trouver dans le même dossier que la DLL. Vérifiez que vos projets génèrent des symboles de débogage (propriétés du projet => Build => Advanced => Output / Debug Info = full); et si vous avez copié le dll, mettez le pdb avec lui.

Vous pouvez également charger des symboles directement dans l’EDI si vous ne souhaitez pas copier de fichiers, mais cela demande plus de travail.

L’option la plus simple consiste à utiliser des références de projet!

J’ai eu le même problème. Il est ce que j’ai trouvé:

1) assurez-vous que tous les projets utilisent le même framework (c’est crucial!)

2) dans Outils / Options> Débogage> Général, assurez-vous que “Activer Just My Code (Managed Only) n’est PAS coché

3) dans Outils / Options> Débogage> Symboles effacer tous les symboles mis en cache, décocher et supprimer tous les emplacements de dossiers sous la liste “Symbols file (.pdb) locations” excepté les “Microsoft Symbol Servers” par défaut Supprimez également tous les chemins statiques dans la zone de texte “Symboles du cache dans ce répertoire”. Cliquez sur le bouton “Empty Symbols Cache”. Enfin, assurez-vous que le bouton radio “Seuls les modules spécifiés” est coché.

4) dans le menu Build / Configuration Manager pour tous les projets, assurez-vous que la configuration est en mode Debug.

Un autre point à garder à l’esprit, assurez-vous que les dll référencés ne sont pas installés dans le GAC. Après le test, j’ai installé mes DLL dans le GAC pour effectuer des tests au niveau du système. Plus tard, lorsque je devais de nouveau déboguer mon code, je ne pouvais pas entrer dans les assemblys référencés avant de les supprimer du GAC.

Lorsque vous souhaitez définir un point d’arrêt dans le code source d’une DLL référencée, assurez-vous d’abord que vous disposez d’un fichier pdb. Vous pouvez ensuite simplement ouvrir le fichier de code source associé et définir un point d’arrêt par-dessus. Le fichier source ne doit pas nécessairement faire partie de votre solution. Comme expliqué dans Comment définir un point d’arrêt dans le code référencé dans Visual Studio?

Vous pouvez examiner vos points d’arrêt via la fenêtre des points d’arrêt, disponibles via Debug -> Windows -> Breakpoints.

Cette approche a l’avantage de ne pas être obligé d’append un projet existant à votre solution uniquement à des fins de débogage, car cela vous a permis de gagner beaucoup de temps. Evidemment, construire une solution avec un seul projet est beaucoup plus rapide que de construire une solution avec beaucoup d’entre eux.

Étape 1: Allez dans Outils -> Option -> Débogage

Étape 2: décochez Activer juste mon code

Étape 3: décocher le fichier source requirejs correspond exactement à la version originale

Étape 4: décochez les propriétés et les opérateurs

Ça doit marcher. J’avais l’habitude de déboguer un fichier .exe et un dll en même temps! Ce que je suggère est 1) Inclure le chemin de la DLL dans votre projet B, 2) Ensuite, comstackr dans le projet debug your A 3) Contrôler que le chemin pointe sur le fichier A dll et de pdb …. 4) Après cela vous Commencez par déboguer le projet B et si tout va bien, vous pourrez déboguer dans les deux projets!

Je ne veux pas inclure un projet de bibliothèque de classes externe dans certaines de mes solutions, alors je me lance dans des assemblages que je consum différemment.

Mes solutions ont un répertoire “Common Assemblies” qui contient mes propres DLL à partir d’autres projets. Les DLL que je référence ont également leurs fichiers PDB associés pour le débogage.

Afin de déboguer et de définir des points d’arrêt, je définis un point d’arrêt dans la source de l’application consommasortingce où j’appelle une méthode ou un constructeur de l’assemblage, puis passe à INTO (F11) l’appel de méthode / constructeur.

Le débogueur chargera le fichier source de l’assembly dans VS et de nouveaux points d’arrêt à l’intérieur de l’assembly peuvent être définis à ce stade.

Ce n’est pas simple, mais fonctionne si vous ne souhaitez pas inclure une nouvelle référence de projet et souhaitez simplement référencer un assemblage partagé à la place.

J’avais les fichiers *.pdb dans le même dossier et utilisais les options d’ Arindam , mais cela ne fonctionnait toujours pas. Je devais activer Activer le débogage de code natif qui se trouve sous Propriétés du projet> Déboguer .