Problème: J'ai un grand projet Visual C++ que j'essaie de migrer vers Visual Studio 2010. C'est un énorme mélange d'éléments provenant de différentes sources et d'âges différents. J'ai des problèmes parce que quelque chose inclut les deux winsock.h
et winsock2.h
.
Question: Quels sont les outils et techniques pour afficher le #include
hiérarchie pour un fichier source Visual Studio C++?
Je sais à propos de 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, le /P
la sortie est longue de 376 932 lignes 8-)
Dans un monde parfait, j'aimerais un affichage hiérarchique des fichiers contenant quels autres fichiers, ainsi que des numéros de ligne afin que je puisse passer aux sources:
source.cpp(1)
windows.h(100)
winsock.h
some_other_thing.h(1234)
winsock2.h
Il y a un réglage:
Paramètres du projet -> Propriétés de configuration -> C/C++ -> Avancé -> Afficher les éléments à inclure
cela va générer l'arbre. Il mappe sur le commutateur du compilateur / showIncludes
Le compilateur prend également en charge 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 come from where.
C'est sous Paramètres du projet -> Propriétés de configuration -> C/C++ -> Avancé -> Afficher les inclus.
Nous avons trouvé que IncludeManager était un outil très puissant. Ce n'est pas gratuit (mais pas cher) et cela nous a permis de comprendre nos problèmes d'inclusion et de réduire notre temps de compilation de 50 à 8 minutes en éliminant de grands morceaux d'inclusions que nous n'utilisions pas.
Pas aussi bon que la fonction d'inclusion hiérarchique de gcc, qui montre la hiérarchie d'inclusion en ligne directe en cas d'erreur. L'option "show includes" dans VS montre tout ce qui est excessif lors du débogage de problèmes de fichiers d'inclusion hiérarchiques.
Here est un bon outil FOSS tiers. Vous pouvez exporter les résultats au format XML, ce qui inclura des données sur le nombre d'occurrences et le nombre de lignes.
Il existe maintenant un plugin pour Visual Studio appelé IncludeToolbox . Il peut lister vos inclusions de personnes à charge et faire plus de choses comme une suppression aléatoire et compiler pour voir si cette inclusion était requise.
Essayez redhat Source-Navigator pour un plus solution graphique .
cl/P devrait vous montrer les numéros de ligne, de sorte que vous puissiez indiquer le contexte d'où un fichier d'en-tête est inclus.
Si vous écrivez les lignes avec ...
grep "^ # line" fichier.i
... alors vous devriez avoir une indication claire des fichiers rencontrés dans l'ordre par le préprocesseur.
S'il s'agit d'un incident ponctuel, le diagnostic devrait être assez rapide.