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

ma question concerne Visual Studio 2008, bien que je suppose qu'il devrait en être de même dans VS2005

j'ai deux solutions dans mon espace de travail, disons A et B.

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 quelques classes de la Solution A. pour ce faire, j'ajoute une référence à la dll d'un des projets dans la solution A.

Le problème, c'est quand j'essaie de débogage. Je veux être en mesure d'entrer dans Un code. Visual studio n'est pas en mesure de charger le code de ces classes ("Il n'y a pas de code source disponible pour l'emplacement actuel.") et je ne peux qu'afficher le démontage, ce qui n'est pas utile.

le seul moyen que je connaisse pour déboguer des classes à partir de la solution A est de lancer la solution B, de détacher tous les processus (dans le menu de débogage) et d'attacher le processus à partir de la solution A.

cependant, c'est très incommode et je ne peux que déboguer un OU B à la fois.

y a-t-il un moyen de permettre d'entrer dans le code des dlls référencés (pour lesquels j'ai le code source)?


Solution: mon erreur a été que je pensais qu'un projet ne peut faire partie d'une solution unique. En fait, un projet peut faire partie de plusieurs solutions.

Lorsque vous avez besoin de référence à l'ancien projet, vous devez simplement ajouter le projet à la solution. Cela se fait en cliquant avec le bouton droit de la souris sur la nouvelle solution dans L'Explorateur de solutions > ajouter > projet existant.

Ensuite, vous pourrez ajouter la référence du projet. Comme d'autres l'ont écrit, vous devriez probablement éviter complètement d'utiliser dll références à votre propre code (ou autre code que vous pourriez avoir besoin de changer et de déboguer).

une très bonne référence à la façon dont les solutions doivent être conçues se trouve dans MSDN .

100
demandé sur Jarekczek 2009-07-15 13:43:07

8 réponses

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

si c'est un fichier (dll) référence, vous avez besoin des symboles de débogage (le fichier" pdb") pour être 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é la dll, mettez l'APB avec.

vous pouvez également charger des symboles directement dans L'IDE si vous ne voulez pas copier de fichiers, mais c'est plus de travail.

l'option la plus facile est d'utiliser des références de projet!

90
répondu Marc Gravell 2009-07-15 09:44:37

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

1) s'assurer que tous les projets utilisent le même cadre (c'est crucial!)

2) dans Outils / Options>Débogage>Généralités assurez-vous que "Activer juste mon Code (géré seulement) n'est pas coché

3) dans Outils/Options>Débogage>les symboles effacer tous les symboles mis en cache, décoincer et supprimer tous les emplacements de dossiers sous le "fichier de symboles (.pdb) localisations "listbox except the default" Microsoft Symbol Les serveurs" mais toujours décocher trop. Supprimez également tous les chemins statiques dans la zone de texte" Cache symbols in this directory". Cliquez sur le bouton" Empty Symbols Cache". Enfin, assurez-vous que le bouton radio" modules seulement spécifiés " est cliqué.

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

33
répondu scott_f 2015-09-23 08:16:55

autre point à garder à l'esprit, assurez-vous que les dlls référencées ne sont pas installées dans le GAC. Après les tests, j'ai installé mes dlls dans le GAC pour faire des tests au niveau du système. Plus tard, quand j'ai dû déboguer mon code à nouveau, je ne pouvais pas entrer dans les assemblages référencés avant de les supprimer du GAC.

9
répondu KevinHou 2013-01-03 15:26:44

lorsque vous voulez définir un point de rupture dans le code source d'une dll référencée, assurez-vous d'abord que vous avez un fichier pdb disponible pour elle. Ensuite, vous pouvez simplement ouvrir le code source du fichier et définissez un point d'arrêt. Le fichier source n'a pas besoin d'être partie de votre solution. Comme expliqué dans Comment puis-je définir un point de rupture en code référencé dans Visual Studio?

vous pouvez revoir vos points d'arrêt à travers la fenêtre Points d'arrêt, disponible via Debug -> Windows -> Points D'Arrêt.

Cette approche a l'avantage que vous n'êtes pas obligé d'ajouter un projet existant pour votre solution juste pour des fins de débogage comme les laissant m'a sauvé beaucoup de temps de construction. Évidemment, construire une solution avec un seul projet en elle est beaucoup plus rapide que de construire une solution avec beaucoup d'entre eux.

2
répondu Carl in 't Veld 2017-05-23 11:33:26

Étape 1: passez à outils-- > Option-- > débogage

Étape 2: Décocher La Case Activer Uniquement Mon Code

Étape 3: Décochez l'option Nécessite un fichier de source de correspondre exactement avec la Version d'origine

Étape 4: , Décochez Étape sur les Propriétés et les Opérateurs

1
répondu Arindam Dhar 2017-07-19 16:00:01

ça doit marcher. J'ai utilisé pour déboguer un .fichier exe et dll en même temps ! Ce que je suggère est 1) Inclure le chemin de la dll dans votre projet B, 2) compilez ensuite dans debug votre projet A 3) Contrôle que le chemin pointe sur le fichier dll et de pdb.... 4) Après cela, vous commencez à déboguer le projet B et si tout va bien, vous serez en mesure de déboguer dans les deux projets !

0
répondu Matthieu 2009-07-15 09:51:16

Je ne veux pas inclure un projet de bibliothèque de classe externe dans certaines de mes solutions, donc j'entre dans des assemblages que je consomme d'une manière différente.

mes solutions ont un répertoire" Common Assemblies " qui contient mes propres DLLs provenant d'autres projets. Les DLLs que je mentionne ont aussi leurs fichiers PDB pour le débogage.

afin de déboguer et de définir les points de rupture, j'ai défini un point de rupture dans la source de l'application consommatrice où je suis appeler une méthode ou un constructeur à partir de l'assemblage et ensuite entrer dans (F11) l'appel méthode/constructeur.

le débogueur chargera le fichier source de l'assemblage en VS et de nouveaux points de rupture à l'intérieur de l'assemblage peuvent être définis à ce point.

ce n'est pas simple, mais cela fonctionne si vous ne voulez pas inclure une nouvelle référence de projet et que vous voulez simplement faire référence à un assemblage partagé à la place.

0
répondu jlafay 2013-07-12 12:52:14

j'avais les fichiers *.pdb dans le même dossier et j'ai utilisé les options de Arindam , mais ça n'a pas marché. Il s'avère que j'avais besoin d'activer activer le débogage de code natif qui se trouve sous propriétés de projet > débogage .

0
répondu Roald 2018-08-02 09:34:36