Afficher la hiérarchie # include pour un fichier C++ dans Visual Studio
problème: j'ai un grand projet C++ visuel que j'essaie de migrer vers Visual Studio 2010. C'est un énorme mélange de choses de différentes sources et de différents âges. J'ai des problèmes parce que quelque chose inclut à la fois winsock.h
et winsock2.h
.
Question: Quels sont les outils et les techniques pour afficher la hiérarchie #include
pour un fichier source C++ de studio visuel?
Je connais cl /P
pour obtenir la sortie du préprocesseur, mais cela n'indique pas clairement quel fichier inclut quels autres fichiers (et dans ce cas, la sortie /P
est de 376,932 lignes de long 8 -)
dans un monde parfait, j'aimerais avoir un affichage hiérarchique des fichiers qui incluent les autres fichiers, ainsi que des numéros de ligne pour que je puisse aller dans les sources:
source.cpp(1)
windows.h(100)
winsock.h
some_other_thing.h(1234)
winsock2.h
8 réponses
Il y a un paramètre:
Paramètres Du Projet -> Propriétés De Configuration -> C/C++ -> Avancé -> Show Comprend
qui générera l'arbre. Il correspond au commutateur du compilateur / showIncludes
"le compilateur supporte également un commutateur /showIncludes -- il ne vous donne pas les numéros de ligne, mais peut donner une vue assez complète de ce qui inclut viennent d'où.
C'est sous Paramètres du Projet -> Propriétés de Configuration -> C/C++ -> Avancé -> Afficher les Comprend.
nous avons trouvé IncludeManager pour être un outil très puissant. Ce n'est pas gratuit (mais pas cher) et cela nous a permis de nous ressaisir de nos problèmes D'inclusions et de laisser tomber notre temps de compilation de 50 minutes à 8 minutes en taillant de gros morceaux d'inclusions que nous n'utilisions pas.
pas aussi bon que la fonctionnalité d'inclusion hiérarchique de gcc, qui montre la hiérarchie d'inclusion en ligne directe dans le cas d'une erreur. L'option" show includes " dans VS montre tout, ce qui est excessif lors du débogage des problèmes de fichiers include hiérarchiques.
Ici est un bon 3e partie, les logiciels libres de l'outil. Vous pouvez exporter les résultats vers XML, qui inclura des données sur le nombre d'occurrences et les numéros de ligne.
Essayer redhat Source-Navigator pour une solution graphique .
cl /P devrait vous montrer les numéros de ligne, de sorte que vous pouvez dire le contexte d'où un fichier d'en-tête est inclus.
si vous retirez les lignes avec ...
grep "^#" ligne de fichier.i
... alors vous devriez avoir une indication assez claire de quels fichiers ont été rencontrés dans l'ordre par le préprocesseur.
s'il s'agit d'un incident isolé ce ça devrait être un diagnostic rapide.
il y a maintenant un plugin pour Visual Studio appelé IncludeToolbox . Il peut lister vos includes dépendants et faire plus de choses comme une suppression et une compilation aléatoires pour voir si cette include était nécessaire.