web-dev-qa-db-fra.com

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

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

Je n'ai pas encore compris comment je peux déboguer efficacement la bibliothèque de classes de B tout en exécutant le programme 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.

Merci d'avance.

108
Konstantinos

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

  • Outils -> Options -> Debugger 
  • Décocher "Activer uniquement mon code"

Par défaut, le débogueur essaie de restreindre la vue du monde au code contenu uniquement 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 dans votre cas), vous devez désactiver JMC pour pouvoir le voir. Sinon, le code sera traité comme externe et en grande partie caché de votre vue. 

MODIFIER

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

  • Debug -> Windows -> Modules
  • Trouvez la DLL du projet qui vous intéresse
  • Clic droit -> Charger les symboles -> Sélectionnez le chemin d'accès au .PDB pour votre autre projet
176
JaredPar

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

12
TheGateKeeper

Assumer le chemin de 

Projet A

C:\Projects\ProjectA

Projet B

C:\Projects\ProjectB

et la dll de ProjectB est en 

C:\Projects\ProjectB\bin\Debug\

Pour déboguer dans ProjectB à partir de ProjectA, procédez comme suit:

  1. Copiez la dll de B avec le .PDB de la dll dans le répertoire de compilation de ProjectA
  2. Maintenant, debug ProjectA. Lorsque le code atteint la partie où vous devez 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. 

REMARQUE: NE MANQUEZ PAS DE COPIER LE FICHIER .PDB

5
Sarath Avanavu

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:

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"

Déboguer:

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

  • Répertoire 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 lance le débogage à partir du projet de la DLL externe, l'application principale s'exécute, mais le débogueur atteint uniquement les points d'arrêt de la DLL externe. Si j'appuie sur debug à partir du projet principal, l'application principale s'exécute avec la DLL externe la plus récente, mais le débogueur ne touche plus que les points d'arrêt du 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 droites de cette façon.

5

J'avais un problème similaire car mes points d'arrêt dans le projet (B) n'étaient pas touchés. 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
Stefan Mitic

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

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

Dans l'onglet Paramètres du projet, recherchez les "répertoires Visual Studio" dans le champ "Code source", ainsi que le chemin d'accès aux sources OpenCV. Assurez-vous ensuite que les fichiers .pdb de chacune des dll de débogage se trouvent dans le même répertoire que celui-ci.

0
TripleS