169 votes

Comment déboguer des projets de bibliothèques de classes externes dans Visual Studio ?

J'ai un projet (A) qui fait référence à un assemblage provenant d'une bibliothèque de classes d'un projet externe (B) qui se trouve dans une autre solution.

Je n'ai pas encore compris comment je peux déboguer efficacement la bibliothèque de classes à partir de B tout en exécutant le programme à partir du projet A. Y a-t-il quelque chose que je dois activer sur le projet B, comme les informations de débogage, etc. afin que je puisse intervenir au moment du débogage à partir de A ?

239voto

JaredPar Points 333733

Essayez de désactiver Just My Code (JMC).

  • Outils > Options > Débogage
  • Décochez la case "Activer uniquement mon code".

Par défaut, le débogueur tente de limiter la vue du monde au code contenu dans votre solution. C'est parfois très utile, mais lorsque vous souhaitez déboguer du code qui n'est pas dans votre solution (comme c'est le cas ici), vous devez désactiver la JMC pour pouvoir le voir. Sinon, le code sera traité comme un code externe et sera en grande partie caché à votre vue.

EDIT

Lorsque vous êtes bloqué dans votre code, essayez ce qui suit.

  • Debug > Windows > Modules
  • Trouver la DLL du projet qui vous intéresse
  • Clic droit > Charger les symboles > Sélectionner le chemin d'accès au fichier .PDB de votre autre projet

7 votes

La case à cocher spécifique était déjà décochée. Ce que j'ai remarqué cependant, c'est qu'il entre dans une méthode de la bibliothèque externe, mais qu'il s'arrête lorsque j'essaie d'appeler une méthode qui fait partie d'une interface.

0 votes

Il se peut que vous deviez accéder aux propriétés d'une DLL et vous assurer que l'option Copier local est réglée sur True. Sinon, les modules ne pourront pas trouver le fichier .pdb pour votre référence.

1 votes

Juste mon code ne semble pas faire de différence (je peux accéder au code externe même s'il est activé), mais trouver le module dans le débogueur aide.

20voto

Sarath Avanavu Points 85

Supposons que le chemin de

Projet A

C:\Projects\ProjectA

Projet B

C:\Projects\ProjectB

et la dll du projet B est en

C:\Projects\ProjectB\bin\Debug\

Pour déboguer dans ProjectB de ProjectA , faites ce qui suit

  1. Copie B avec les dll .PDB à la ProjectA dans le répertoire de compilation.
  2. Déboguer maintenant ProjectA . Lorsque le code atteint la partie où vous avez besoin d'appeler la méthode ou les événements de la dll, etc. pendant le débogage, appuyez sur F11 pour entrer dans le code de la dll.

NOTE : NE PAS OUBLIER DE COPIER LE FICHIER .PDB

13voto

TheGateKeeper Points 1290

Cette question me préoccupe depuis un certain temps. Ce que je fais habituellement, c'est reconstruire ma bibliothèque externe en utilisant le mode débogage, puis copier les fichiers .dll et .pdb dans le répertoire bin de mon site web. Cela me permet d'entrer dans le code de la bibliothèque.

4 votes

Auriez-vous par hasard trouvé une meilleure solution à ce problème au cours des 8 dernières années ?

6voto

Je lance deux instances de Visual Studio, l'une pour la dll externe et l'autre pour l'application principale.
Dans les propriétés du projet de la dll externe, définissez ce qui suit :

Construire des événements :

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

Debug :

  • Démarrer le programme externe : C:\<path-to-main>\bin\debug\<AppName>.exe

  • Répertoire de travail C:\<path-to-main>\bin\debug

Ainsi, chaque fois que je construis la dll externe, elle est mise à jour dans le répertoire de l'application principale. Si je lance le débogage à partir du projet de la dll externe, l'application principale s'exécute, mais le débogueur n'atteint que les points d'arrêt de la dll externe. Si je lance le débogage à partir du projet principal, l'application principale s'exécute avec la dll externe la plus récente, mais le débogueur ne rencontre plus que des points d'arrêt dans le projet principal.

Je sais qu'un seul débogueur peut faire l'affaire pour les deux, mais je trouve qu'il est plus facile de garder les deux en ligne de compte de cette façon.

3voto

Lachezar Lalov Points 379

Si vous avez principal (projet A) y bibliothèque externe (projet B) :

  1. Ouvert (projet A) dans Visual Studio.

  2. Cliquez avec le bouton droit de la souris sur solution -> Ajouter un projet existant -> puis sélectionner le fichier .csproj de votre bibliothèque externe (projet B) .

  3. De nouveau dans visual studio cliquer avec le bouton droit de la souris sur (projet A) -> Ajouter -> Référence du projet... -> et ensuite ajouter une coche sur la bibliothèque externe que vous souhaitez déboguer (projet B) .

  4. Enfin placer des points de freinage en (projet A) où votre bibliothèque externe (projet B) est appelée et exécuter avec F5 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X