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


137

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

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 tel que les informations de débogage, etc. pour que je puisse intervenir au moment du débogage à partir de A?

Merci d'avance.

Réponses:


202

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

  • Outils -> Options -> Débogueur
  • Décochez "Activer uniquement mon code"

Par défaut, le débogueur essaie de restreindre la vue du monde au code qui est uniquement contenu dans votre solution. C'est vraiment utile à certains moments, mais lorsque vous voulez déboguer du code qui n'est pas dans votre solution (comme c'est votre cas), vous devez désactiver JMC pour le voir. Sinon, le code sera traité comme externe et largement caché de votre vue.

ÉDITER

Lorsque votre code ne fonctionne pas, essayez ce qui suit.

  • Déboguer -> Windows -> Modules
  • Trouvez la DLL du projet qui vous intéresse
  • Clic droit -> Charger les symboles -> Sélectionnez le chemin vers le .PDB pour votre autre projet

2
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 il intervient lorsque j'essaye d'appeler une méthode qui fait partie d'une interface.
Konstantinos

Vous devrez peut-être accéder aux propriétés d'une DLL et vous assurer que Copy Local est défini sur True. Sinon, les modules ne pourront pas trouver le .pdb pour votre référence.
Bryan Rayner

Just My Code ne semble pas faire de différence (je peux sauter dans le code externe même s'il est activé), mais trouver le module dans le débogueur aide.
TheOperator

3
Un fichier de symboles correspondant n'a pas été trouvé dans ce dossier.
Christine

1
Si vous ne disposez pas de fichiers PDB pour un module référencé, ReSharper peut être utilisé pour décompiler les binaires à l'aide de l'option «Charger les symboles avec ReSharper Deecompiler» dans le menu contextuel de Debug / Windows / Modules. très puissant.
emilast

12

Cela me dérange depuis un certain temps. Ce que je finis généralement par faire, c'est reconstruire ma bibliothèque externe en utilisant le mode débogage, puis copiez à la fois .dll et le fichier .pdb dans la corbeille de mon site Web. Cela me permet d'entrer dans le code de la bibliothèque.


10

Supposons le chemin de

Projet A

C:\Projects\ProjectA

Projet B

C:\Projects\ProjectB

et la dll de ProjectB est dans

C:\Projects\ProjectB\bin\Debug\

Pour déboguer ProjectBdepuisProjectA , procédez comme suit

  1. Copier Bla DLL avec les DLL.PDB dans le ProjectArépertoire de compilation de.
  2. Déboguez maintenant ProjectA. Lorsque le code atteint la partie où vous devez appeler la méthode ou les événements de la dll pendant le débogage, appuyez sur F11pour entrer dans le code de la dll.

REMARQUE: NE MANQUEZ PAS DE COPIER LE FICHIER .PDB


5

Je lance deux instances de Visual Studio - une pour la DLL externe et une pour l'application principale.
Dans les propriétés du projet de la dll externe, définissez les éléments suivants:

Créer 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"

Déboguer:

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

  • Directeur de travail C:\<path-to-main>\bin\debug

De cette façon, chaque fois que je construis la dll externe, elle est mise à jour dans le répertoire de l'application principale. Si je frappe le débogage du projet de la dll externe - l'application principale s'exécute, mais le débogueur n'atteint que les points d'arrêt dans la dll externe. Si j'appuie sur le débogage à partir du projet principal, l'application principale s'exécute avec la dll externe la plus récemment construite, mais maintenant le débogueur n'atteint que les points d'arrêt dans le projet principal.

Je me rends compte qu'un débogueur fera le travail pour les deux, mais je trouve plus facile de garder les deux droits de cette façon.


1

[selon Martin Beckett, le gars qui m'a envoyé cette réponse]

Vous pouvez déboguer dans une bibliothèque externe.

Dans l'onglet des paramètres du projet, recherchez «répertoires de studio visuel» dans le champ «code source», y compris le chemin d'accès aux sources openCV. Assurez-vous ensuite que les fichiers .pdb pour chacune des dll de débogage se trouvent dans le même répertoire que la dll.


0

J'avais un problème similaire car mes points d'arrêt dans le projet (B) n'étaient pas atteints. Ma solution était de reconstruire le projet (B) puis de déboguer le projet (A) car les dll devaient être mises à jour.

Visual studio devrait vous permettre de déboguer dans une bibliothèque externe.


0

Références NuGet

Supposons que -Project_A (produit project_a.dll) -Project_B (produit project_b.dll) et Project_B références aux packages Project_A by NuGet, puis copiez simplement project_a.dll, project_a.pdb dans le dossier Project_B / Packages. En effet, cela devrait être copié dans le fichier / bin.

Déboguez maintenant Project_A. Lorsque le code atteint la partie où vous devez appeler la méthode ou les événements de la dll pendant le débogage, appuyez sur F11 pour entrer dans le code de la dll.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.