web-dev-qa-db-fra.com

Outils de profilage de code source C et C ++

Duplicata possible:
Quel est votre outil de profilage préféré (pour C++)

Existe-t-il de bons outils pour profiler un code source qui est un mélange de C et C++. Quels sont les avantages et les inconvénients de tout, et lesquels avez-vous utilisé et recommanderiez-vous pour l'utilisation. Veuillez ne pas me fournir une liste d'outils de google. Je peux le faire aussi, ce que je veux, c'est tirer parti de l'expérience personnelle de quelqu'un qui a utilisé ces outils et connaît les avantages et les inconvénients à leur sujet.
Merci d'avance.

23
Alok Save

J'ai trouvé gprof pour être le meilleur profileur de hotspot CPU, et Google Performance Tools pour être le meilleur profileur d'échantillonnage. Les deux fonctionnent pour C et C++.

À mon avis, il existe pas de bons outils de profilage sous Windows .

Avantages et inconvénients de GNU gprof

  • GCC uniquement
  • Fonctionne avec C et C++
  • Ne traite que le temps CPU et code à l'intérieur du binaire, vous avez besoin de tout ce que vous souhaitez profiler lié statiquement
  • Très précise
  • Ajoute une petite surcharge à l'exécution

Avantages et inconvénients de Google Performance Tools

  • Je pense que cela nécessite la chaîne d'outils GNU
  • Échoue parfois à identifier les symboles
  • Très personnalisable
  • Affiche une grande variété de formats, y compris le format Callgrind, et charge automatiquement KCacheGrind pour vous
  • Dispose également de divers outils de profilage de la mémoire
  • Est un échantillonneur profileur, avec une surcharge minimale

Questions et réponses utiles connexes

33
Matt Joiner

Je serais respectueusement en désaccord avec Matt.

L'outil que j'utilise tout le temps sur Windows est la technique de pause aléatoire , et il fonctionne avec toutes les langues prises en charge par IDE.

À titre d'exemple d'utilisation pour l'optimisation des performances, dans ce cas montre comment une accélération de 43 fois a été obtenue grâce à une série d'étapes.

Gprof a beaucoup de problèmes, listés ici , et selon le manuel de google-perftools, certains des mêmes problèmes se répètent là-bas, tels que les procédures de rapport, pas les lignes, mettant l'accent sur le temps (local), mettant l'accent sur le graphique, etc. (je ne peux pas dire à partir du document s'il échantillonne lorsqu'il est bloqué.)

À mesure que les systèmes logiciels deviennent de plus en plus grands, le temps libre devient de moins en moins pertinent. Le compteur de programmes passe la plupart de son temps dans des routines de bibliothèque ou bloqué dans le système. Les graphiques deviennent de gigantesques nids. Les gens demandent "Je sais que la fonction X est coûteuse, mais où se trouve le problème dans la fonction X ?" De plus, les "goulots d'étranglement" deviennent de plus en plus gros, car la pile devient plus profonde en moyenne, et chaque couche de la pile est une nouvelle opportunité de faire plus d'appels de fonction que nécessaire.

Zoom est un exemple d'échantillonneur de pile qui rapporte le pourcentage par ligne et les échantillons bloqués et permet à l'utilisateur de contrôler l'échantillonnage afin de ne pas diluer le jeu d'échantillons lors de la saisie par l'utilisateur.

EDIT: Désolé, ne peut pas laisser assez bien seul. Voici une nouvelle explication:

La façon dont les programmes fonctionnent, ils tracent un arbre d'appels, qui ressemble beaucoup à l'arbre de chêne à l'extérieur de ma fenêtre. Il a un tronc (principal) qui fait germer des branches (sites d'appel) qui poussent d'autres branches sur plusieurs niveaux jusqu'aux feuilles (instructions) et aux glands (blocage des appels).

Lorsque le chirurgien de l'arbre vient le tailler (l'optimiser), regarde-t-il uniquement où se trouvent les feuilles (points chauds)? Ignore-t-il les glands (pas d'échantillons lors du blocage)? Non, il recherche des branches (sites d'appel) qui sont à la fois lourdes (sur la pile beaucoup) et malsaines (inutiles). Voilà ce qu'il taille. C'est ce que font la pause aléatoire et Zoom, c'est aider à trouver ces sites d'appels.

4
Mike Dunlavey

Vous pouvez utiliser Callgrind pour créer une sortie de profilage. Il fait partie de Valgrind . La sortie de Callgrind pourrait être utilisée avec KCacheGrind , ce qui vaut probablement le coup d'œil tant que vous utilisez Linux.

3
MOnsDaR

AMD CodeAnalyst est plutôt sympa. C'est aussi multiplateforme qui est sympa quand on trouve un goulot d'étranglement spécifique à la plateforme.

2
Vitor Py