87 votes

Profiler le processus de compilation C ++

J'ai tendance à écrire plutôt grandes basé sur un modèle d'en-tête uniquement bibliothèques C++ et mes utilisateurs se plaignent souvent sur les temps de compilation. Après avoir réfléchi à la question, il m'est apparu que je n'ai aucune idée de l'endroit où le temps va. Est-il un moyen simple pour le profil de la compilation C++ processus communs, de compilateurs, tels que g++, cpi, et xlC? Par exemple, est-il possible de se faire une idée de la façon dont beaucoup de temps est passé à l'intérieur de chacune des phases de la compilation C++ ?

71voto

osgx Points 28675

Pour gcc/g++ il y a des options de débogage pour trouver how much time is spent within each of the phases of C++ compilation?

-Q Fait le compilateur imprimer chaque nom de fonction comme il est compilé, et imprimer des statistiques sur chaque passe quand il se termine.

-ftime-rapport Fait le compilateur imprimer des statistiques sur le temps consommé par chaque passe quand il se termine.

Vous pouvez poster de sortie de g++ compilation du fichier source unique avec -v -ftime-report ici pour en discuter. Les Passes sont décrites dans GCCINT: 9 Passe et les Fichiers du Compilateur

15voto

ulidtko Points 3834

Il y a un outil de l'augmentation de projet dans l'un des questions pertinentes.

De toute évidence, il exige de code source avec l'instrumentation TEMPLATE_PROFILE_ENTER() et TEMPLATE_PROFILE_EXIT() macro appels. Ces macros, puis générer des diagnostics spécifiques (avertissements) au moment de la compilation, qui sont chronométrées et collectées avec l'instanciation des piles d'appels (qui a pour conséquence de permettre la construction et la visualisation de callgraphs). Pas mal, de l'OMI.

Je n'ai pas encore bien.

5voto

Useless Points 18909

Vous pouvez les séparer dans une certaine mesure (je suis en supposant make)

  • ajouter une règle de génération que seuls les pré-traite les fichiers (à l'aide de l' -E switch), et un .PHONY de la cible, qui dépend du préprocesseur fichiers de sortie tout comme le binaire normal cible dépend .o fichiers. De mesurer combien de temps il faut pour construire cette cible
  • ajouter un 'PHONY de la cible qui dépend de l' .o fichiers mais n'a pas de lien entre eux. De mesurer combien de temps il faut pour construire cette cible (de nettoyage)
  • de mesurer combien de temps il faut pour faire une nouvelle version de l'habitude binaire

Maintenant vous avez une idée de combien de temps il faut pour pré-traiter, compiler et lier. Vous pouvez également comparer optimisés et non optimisé (-O0) des versions de deuxième et troisième cible, pour voir combien de temps est consacré à l'optimiseur.

2voto

Novelocrat Points 12126

Vous pourriez être en mesure de tirer parti de certaines variantes de strace -e trace=process -f -r -ttt -T , au moins pour les compilateurs tels que g ++, qui sont décomposés en plusieurs processus.

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