2010-11-04 5 views
5

Quelqu'un peut-il recommander des outils pour l'analyse de compilation et d'exécution du code C++? Je suis frappé jour après jour avec des demandes d'identifier où certaines surcharges de fonctions sont utilisées dans une très grande base de code. Ma méthode actuelle implique une combinaison de (a) recherche de texte utilisant grep/find et (b) usurpation des fichiers include pour commenter les surcharges en question, et recompilant complètement ainsi la construction où les surcharges sont utilisées. Comme vous pouvez l'imaginer, cela prend beaucoup de temps. Je le fais sur une plate-forme Red Hat Linux, d'ailleurs.Recommandations pour les outils de profilage C++

+0

Vous voulez savoir statiquement où les sites d'appel sont pour des méthodes spécifiques? Y a-t-il quelque chose de spécial sur le fait qu'ils sont surchargés, ou juste qu'il est difficile de déterminer laquelle des surcharges N est appelée à partir d'un site particulier? –

+1

Je ne pense pas que ce soit hors sujet. Certes, j'ai demandé une recommandation d'outil, mais le commentaire de clôture indique: «... Au lieu de cela, décrivez le problème et ce qui a été fait jusqu'à présent pour le résoudre.» * Si vous lisez la question, je fais les deux. –

Répondre

8

J'ai utilisé une combinaison de gprof et un script appelé gprof2dot qui vous donne un graphique d'appel montrant combien de temps est passé dans chaque méthode.

Voir cet article sur gprof. Jetez aussi un coup d'oeil à:

Optimizing C/C++ programs using the GProf profiler

Voici un graphe d'appel exemple montrant le temps passé dans chaque méthode (extrait de la page gprof2dot):

alt text

+0

Merci beaucoup pour cela. Une question: à partir de votre réponse et de la note de gprof que vous avez référencée, il semble que gprof soit bon à l'analyse de l'exécution, mais qu'en est-il de la compilation? Je veux vraiment savoir quels sont les chemins que le code * traverse * mais potentiellement ce qu'il * pourrait *.Je ne suis pas si préoccupé par les temps de performance à ce stade, mais je veux être en mesure de répondre à des questions comme "liste tous les endroits dans le code où' X (const char *) 'est appelé" –

+0

@Robin Welch: On dirait vous voulez quelque chose comme cscope http://cscope.sourceforge.net/. Un autre outil que vous pourriez trouver utile est ctags http://ctags.sourceforge.net/. Ce sont deux des principaux outils utilisés pour naviguer dans le code source du noyau Linux. –

1

I @ deuxième recommandation de RA d'Intel VTune digne de regarder. Ne tournez pas votre nez à gprof, c'est omniprésent et c'est un bon début. Vous pouvez être en mesure d'obtenir les informations que vous voulez de votre débogueur - qui est?

Si vous nous avez indiqué quel compilateur vous utilisez, nous pourrions vous dire quelles fonctions il a pour vous aider.

+0

C'est la version 3.2.3 20030502 de gcc (Red Hat Linux 3.2.3-34) S'il vous plaît ne pas se moquer - ce n'est pas mon choix mais les clients. –

+0

@Robin Welch: pas l'intention de se moquer, mais ne peut pas aider beaucoup soit avec GCC. –

3

Vous pouvez utiliser Callgrind. Maintenant, cela fait partie du projet valgrind.

Il a très agréable interface graphique pour examiner les résultats: KCacheGrind

Les deux sont disponibles pour votre distro.

1

Il y a aussi TAU, ce qui peut être difficile à configurer, mais assez puissant.

Questions connexes