Scroll to navigation

GPROF(1) GNU GPROF(1)

NOM

gprof – Afficher les données de profilage du graphe d'appels

SYNOPSIS

gprof [ -[abcDhilLrsTvwxyz] ] [ -[ABCeEfFJnNOpPqQRStZ][name] ]
[ -I dirs ] [ -d[num] ] [ -k from/to ]
[ -m min-count ] [ -R map_file ] [ -t table-length ]
[ --[no-]annotated-source[=name] ]
[ --[no-]exec-counts[=name] ]
[ --[no-]flat-profile[=name] ] [ --[no-]graph[=name] ]
[ --[no-]time=name] [ --all-lines ] [ --brief ]
[ --debug[=level] ] [ --function-ordering ]
[ --file-ordering map_file ] [ --directory-path=dirs ]
[ --display-unused-functions ] [ --file-format=name ]
[ --file-info ] [ --help ] [ --line ] [ --inline-file-names ]
[ --min-count=n ] [ --no-static ] [ --print-path ]
[ --separate-files ] [ --static-call-graph ] [ --sum ]
[ --table-length=len ] [ --traditional ] [ --version ]
[ --width=n ] [ --ignore-non-functions ]
[ --demangle[=STYLE] ] [ --no-demangle ]
[--external-symbol-table=name]
[ image-file ] [ profile-file ... ]

DESCRIPTION

gprof produit un profilage d’exécution pour les programmes en C, Pascal ou Fortran 77. L’effet des routines appelées est incorporé dans le profil de chaque appelant. Les données de profil sont prises dans le fichier de profil de graphe d’appels (gmon.out par défaut) qui est créé par les programmes compilés avec l’option -pg de cc, pc et f77. L’option -pg lie aussi les versions de routines de bibliothèque qui sont compilées pour le profilage. gprof lit le fichier objet indiqué (par défaut a.out) et établit la relation entre sa table de symboles et le profil de graphe d’appels à partir de gmon.out. Si plus d’un fichier de profil est spécifié, la sortie de gprof affiche la somme des informations de profil des fichiers de profil indiqués.

Pour utiliser gcc 2.95.x ou 3.0 pour compiler des binaires, il peut être nécessaire d’ajouter l’option -fprofile-arcs à la ligne de commande de compilation pour que le graphe d’appels soit correctement enregistré dans le fichier gmon.out.

gprof calcule le temps total passé dans chaque routine. Ensuite, ces durées sont propagées le long des arêtes du graphe d’appels. Les cycles sont détectés, et des appels dans un cycle sont faits pour partager la durée du cycle.

Plusieurs formes de sortie sont disponibles à partir de l’analyse.

Le profil plat affiche le temps passé par un programme dans chaque fonction et combien de fois cette fonction a été appelée. Pour connaitre simplement quelles fonctions consomment la plus grande partie des cycles, une réponse concise est fournie ici.

Le graphe d’appels affiche, pour chaque fonction, lesquelles l’appelle, quelles autres fonctions elle appelle et combien de fois. Une estimation est aussi faite du temps passé dans les sous-routines de chaque fonction. Cela peut suggérer des endroits où il est possible d’éliminer des appels de fonction qui consomment beaucoup de temps.

Le listage du source annoté est une copie du code source du programme étiqueté avec le nombre de fois que chaque ligne du programme a été exécutée.

OPTIONS

Ces options indiquent le format de sortie de gprof à utiliser.

Beaucoup de ces options prennent une symspec (spécification de symbole) pour spécifier les fonctions à inclure ou exclure. Ces options peuvent être spécifiées plusieurs fois, avec des spécifications de symbole différentes, pour inclure ou exclure des ensembles de symboles.

Spécifier n’importe laquelle de ces options outrepasse celles par défaut (-p -q) qui affiche un profil plat et une analyse de graphe d’appels pour toutes les fonctions.

"-A[symspec]"
"--annotated-source[=symspec]"
L’option -A fait que gprof affiche le code source annoté. Si symspec est spécifié, seule la sortie pour les symboles correspondants est affichée.
"-b"
"--brief"
Si l’option -b est spécifiée, gprof n’affiche pas les descriptions détaillées essayant d’expliquer la signification de tous les champs dans les tables. C’est utile pour une impression de la sortie ou si cela ennuie.
"-B"
L’option -B fait que gprof affiche l’analyse du graphe d’appels.
"-C[symspec]"
"--exec-counts[=symspec]"
L’option -C fait que gprof affiche un décompte des fonctions et du nombre de fois que chacune a été appelée. Si symspec est spécifié, seul le décompte des symboles correspondants est affiché.

Si le fichier de données de profil contient des enregistrements de comptage de blocs de base, spécifier l’option -l avec l’option -C fait que les comptages de blocs de base seront effectués et affichés.

"-i"
"--file-info"
L’option -i fait que gprof affiche des informations sommaires à propos du(des) fichier(s) de données de profil et quitte ensuite. Le nombre d’histogramme, de graphe d’appels et des enregistrements de compte de blocs de base est affiché.
"-I dirs"
"--directory-path=dirs"
L’option -I spécifie une liste de répertoires de recherche dans lequel trouver les fichiers source. La variable d’environnement GPROF_PATH peut être aussi utilisée pour transmettre cette information. Cette option est utilisée principalement pour une sortie de source annoté.
"-J[symspec]"
"--no-annotated-source[=symspec]"
L’option -J fait que gprof n’affiche pas le code source annoté. Si symspec est spécifié, gprof affiche le source annoté, mais exclut les symboles correspondants.
"-L"
"--print-path"
Normalement, les noms de fichier source sont affichés avec la partie chemin supprimée. L’option -L fait que gprof affiche le chemin complet des fichiers source, qui est déterminé à partir de l’information de débogage symbolique dans le fichier image et est relatif au répertoire d’invocation du compilateur.
"-p[symspec]"
"--flat-profile[=symspec]"
L’option -p fait que gprof affiche un profil plat. Si symspec est spécifié, le profil plat n’est affiché que pour les symboles correspondants.
"-P[symspec]"
"--no-flat-profile[=symspec]"
L’option -P fait que gprof supprime l’affichage d’un profil plat. Si symspec est spécifié, gprof affiche un profil plat mais sans les symboles correspondants.
"-q[symspec]"
"--graph[=symspec]"
L’option -q fait que gprof affiche l’analyse du graphe d’appels. Si symspec est spécifié, gprof affiche le graphe d’appels seulement pour les symboles correspondants et leurs enfants.
"-Q[symspec]"
"--no-graph[=symspec]"
L’option -Q fait que gprof supprime l’affichage du graphe d’appels. Si symspec est spécifié, gprof affiche un graphe d’appels, mais exclut les symboles correspondants.
"-t"
"--table-length=num"
L’option -t fait que le num de lignes de source les plus actives dans chaque fichier source est listée quand l’annotation de source est activée. La valeur par défaut est 10.
"-y"
"--separate-files"
Cette option affecte seulement la sortie de source annotée. Normalement, gprof affiche les fichiers de source annotée sur la sortie standard. Si cette option est spécifiée, une source annotée pour un fichier appelé chemin/nomfichier est générée dans le fichier nomfichier-ann. Si le système de fichiers sous-jacent tronque nomfichier-ann de façon à écraser le nomfichier original, gprof génère le source annoté dans le fichier nomfichier.ann à la place (si le fichier original possède une extension, celle-ci est remplacée par .ann).
"-Z[symspec]"
"--no-exec-counts[=symspec]"
L’option -Z fait que gprof n’affiche pas un compte des fonctions et le nombre de fois que chacune a été appelée. Si symspec est spécifié, le compte est affiché, mais les symboles correspondants sont exclus.
"-r"
"--function-ordering"
L’option --function-ordering fait que gprof affiche un classement suggéré des fonctions pour le programme, basé sur les données de profilage. Cette option propose un classement susceptible d’améliorer le comportement de la pagination, du TLB et du cache pour le programme sur les systèmes qui gèrent un classement arbitraire des fonctions dans un exécutable.

La manière exacte de forcer l’éditeur de liens à placer les fonctions dans un ordre particulier dépend du système et déborde du cadre de ce manuel.

"-R map_file"
"--file-ordering map_file"
L’option --file-ordering fait que gprof affiche un classement suggéré pour les lignes .o de lien pour le programme, basé sur les données de profilage. Cette option suggère un ordre pouvant améliorer le comportement de la pagination, du TLB et du cache pour le programme sur les systèmes qui ne gèrent pas un ordre arbitraire des fonctions dans un exécutable.

L’utilisation de l’argument -a est vivement recommandée avec cette option.

L’argument map_file est un chemin de fichier qui fournit des correspondances de nom de fonction et de fichier objet. Le format de ce fichier est similaire à celui de la sortie du programme nm(1).

        c-parse.o:00000000 T yyparse
        c-parse.o:00000004 C yyerrflag
        c-lang.o:00000000 T peut_être_nom_méthode_objc
        c-lang.o:00000000 T afficher_statistiques_langage
        c-lang.o:00000000 T reconnaitre_mot_clé_objc
        c-decl.o:00000000 T afficher_identifiant_langage
        c-decl.o:00000000 T afficher_type_langage
        ...
    

Pour créer un map_file avec GNU nm, saisir une commande telle que « nm --extern-only --defined-only -v --print-file-name nom_programme ».

"-T"
"--traditional"
L’option -T fait que gprof affiche sa sortie sous la forme « traditionnelle » du style BSD.
"-w width"
"--width=width"
Définir la largeur des lignes de sortie à width. Ce n’est actuellement utilisé que lors de l’affichage de l’index des fonctions au bas du graphe d’appels.
"-x"
"--all-lines"
Cette option affecte seulement la sortie de source annotée. Par défaut, seules les lignes au début d’un bloc de base sont annotées. Si cette option est spécifiée, chaque ligne d’un bloc de base est annotée en répétant l’annotation de la première ligne. Ce comportement est similaire à l’option -a de tcov.
"--demangle[=style]"
"--no-demangle"
Ces options permettent de déterminer si les noms de symboles C++ doivent être décoder (demangled) lors de l’affichage de la sortie. Par défaut, les symboles sont décodés. L’option --no-demangle peut être utilisée pour désactiver le décodage. Les différents compilateurs ont des styles de décoration de nom différents. L’argument facultatif de style de décodage peut être utilisé pour choisir un style de décodage adapté à un compilateur.

Options d’analyse

"-a"
"--no-static"
L’option -a fait que gprof supprime l'affichage des fonctions déclarées statiques (privées – il s’agit de fonctions dont les noms ne sont pas listés comme global et qui ne sont pas visibles en dehors du fichier, de la fonction ou du bloc où elles ont été définies). Le temps passé dans ces fonctions, les appels vers/depuis celles-ci, etc., seront tous attribués à la fonction qui a été chargée immédiatement avant dans le fichier exécutable. Cette option affecte à la fois le profil plat et le graphe d’appels.
"-c"
"--static-call-graph"
L’option -c fait que le graphe d’appels du programme est augmenté par une heuristique qui examine l’espace textuel du fichier objet et identifie les appels de fonction dans le code machine binaire. Puisque les enregistrements normaux de graphe d’appels sont seulement générés quand les fonctions sont entrées, cette option identifie l’enfant qui aurait pu être appelé, mais qui ne l’a pas été. Les appels de fonction qui n’ont pas été compilés avec le profilage activé, sont aussi identifiés, mais seulement si les entrées de la table de symboles sont aussi présentes pour eux. Les appels de bibliothèque dynamique ne sont en général pas trouvés par cette option. Les parents ou les enfants identifiés à travers cette heuristique sont indiqués dans le graphe d’appels par des comptes d’appels à 0.
"-D"
"--ignore-non-functions"
L’option -D fait que gprof ignore les symboles qui ne sont pas connus pour être des fonctions. Cette option produit des données de profil plus précises sur les systèmes qui la gèrent (Solaris et HPUX par exemple).
"-k from/to"
L’option -k permet de supprimer du graphe d’appels tout segment de symboles correspondant à la symspec from vers ceux correspondant à la symspec to.
"-l"
"--line"
L’option -l active le profilage ligne par ligne, ce qui fait que les correspondances d’histogramme sont chargées comme des lignes de code source individuelles au lieu de fonctions. Cette fonctionnalité n’est activée qu’avec les programmes compilés avec d’anciennes versions du compilateur gcc. Les versions récentes de gcc sont conçues pour fonctionner avec l’outil gcov(1).

Si le programme a été compilé pour fonctionner avec le comptage des blocs de base activé, cette option identifie aussi le nombre de fois que chaque ligne de code a été exécutée. Tandis que le profilage ligne par ligne permet d’isoler la partie d’une grande fonction dans laquelle un programme passe son temps, il accroit significativement le temps d’exécution de gprof et amplifie les inexactitudes statistiques.

"--inline-file-names"
Cette option fait que gprof affiche le fichier source après chaque symbole, à la fois dans le profil plat et dans le graphe d’appels. Le chemin complet du fichier est affiché si cette option est utilisée avec l’option -L.
"-m num"
"--min-count=num"
Cette option n’affecte que la sortie du comptage d’exécutions. Les symboles qui sont exécutés moins de num fois sont supprimés.
"-nsymspec"
"--time=symspec"
L’option -n fait que gprof, dans son analyse de graphe d’appels, répercute les temps pour les symboles correspondants à symspec.
"-Nsymspec"
"--no-time=symspec"
L’option -N fait que gprof, dans son analyse de graphe d’appels, ne répercute pas les temps pour les symboles correspondants à symspec.
"-Sfilename"
"--external-symbol-table=filename"
L’option -S fait que gprof lit un fichier externe de table de symboles, tel que /proc/kallsyms, plutôt que la table de symboles du fichier objet donné (par défaut a.out). Cette option est utile pour le profilage des modules du noyau.
"-z"
"--display-unused-functions"
Si l’option -z est fournie, gprof mentionne toutes les fonctions du profil plat, même celles qui n’ont jamais été appelées et qui n’ont jamais consommé de temps. Cette option est utile avec l’option -c pour découvrir quelles routines n’ont jamais été appelées.

Options diverses

"-d[num]"
"--debug[=num]"
L’option -d num spécifie les options de débogage. Si num n’est pas indiqué, tout le débogage est activé.
"-h"
"--help"
L’option -h affiche l’utilisation en ligne de commande.
"-Oname"
"--file-format=name"
Cette option sélectionne le format des fichiers de données de profil. Les formats reconnus sont auto (valeur par défaut), bsd, 4.4bsd, magic et prof (pas encore gérée).
"-s"
"--sum"
L’option -s fait que gprof récapitule les informations des fichiers de données de profil qu’il a lus et écrit un fichier de données de profil appelé gmon.sum qui contient toutes ces informations. Le fichier gmon.sum peut être un des fichiers d’entrée spécifiés. Cette option a pour effet de fusionner les données des autres entrées dans le fichier gmon.sum.

Finalement, gprof peut être exécuté de nouveau sans l’option -s pour analyser les données cumulées dans le fichier gmon.sum.

"-v"
"--version"
L’option -v fait que gprof affiche le numéro de version actuel puis quitte.

Options obsolètes

Ces options ont été remplacées par des nouvelles versions qui utilisent symspec.

"-e function_name"
L’option -e function_name fait que gprof n’affiche pas les informations concernant la fonction function_name (et ses enfants...) dans le graphe d’appels. La fonction sera toujours listée comme enfant de n’importe quelle fonction l’appelant, mais son numéro d’index sera affiché comme [not printed]. Plus d’une option -e peut être indiquée ; un seul function_name peut être indiqué avec chaque option -e.
"-E function_name"
L’option -E function_name fonctionne comme l’option -e, mais le temps passé dans la fonction (et les enfants qui n’ont pas été appelés ailleurs) ne sera pas utilisé pour calculer le pourcentage de temps pour le graphe d’appels. Plus d’une option -E peut être indiquée ; un seul function_name peut être indiqué avec chaque option -E.
"-f function_name"
L’option -f function_name fait que gprof limite le graphe d’appels à la fonction function_name et ses enfants (et leurs enfants...). Plus d’une option -f peut être indiquée ; un seul function_name peut être indiqué avec chaque option -f.
"-F function_name"
L’option -F function_name fonctionne comme l’option -f, mais seul le temps passé dans la fonction et ses enfants (et leurs enfants...) sera utilisé pour calculer le temps total et le pourcentage de temps pour le graphe d’appels. Plus d’une option -F peut être indiquée ; un seul function_name peut être indiqué avec chaque option -F. L’option -F outrepasse l’option -E.

FICHIERS

"a.out"
La liste de noms et l’espace textuel.
"gmon.out"
Graphe d’appels et profil dynamiques.
"gmon.sum"
Récapitulation dynamique de graphe d’appels et profil.

BOGUES

La granularité de l'échantillonnage est indiquée, mais elle reste statistiquement au mieux. Nous supposons que le temps nécessaire à chaque exécution d’une fonction peut s’exprimer par le temps total de la fonction divisé par le nombre de fois que la fonction est appelée. Ainsi, le temps propagé le long des segments du graphe d’appels vers les parents de la fonction est directement proportionnel au nombre de fois que ce segment est parcouru.

Les parents qui ne sont pas eux-mêmes profilés verront le temps de leurs enfants profilés leur être propagé, mais ils apparaîtront comme invoqués spontanément dans la liste du graphe d’appels et leur temps ne sera pas propagé plus loin. De même, les capteurs de signaux, même s’ils sont profilés, apparaîtront comme spontanés (bien que pour des raisons plus obscures). Tout enfant profilé d’un capteur de signaux devrait voir son temps propagé correctement, à moins que le capteur de signaux n’ait été appelé pendant l’exécution de la routine de profilage, auquel cas tout est perdu.

Le programme profilé doit appeler exit(2) ou quitter normalement pour que les informations de profilage soient sauvegardées dans le fichier gmon.out.

VOIR AUSSI

cc(1), prof(1) et l’entrée d’Info pour gprof.

« An Execution Profiler for Modular Programs », par S. Graham, P. Kessler, M. McKusick ; Software - Practice and Experience, Vol. 13, pp. 671-685, 1983.

« gprof: A Call Graph Execution Profiler », par S. Graham, P. Kessler, M. McKusick ; Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, No 6, pp. 120-126, juin 1982.

COPYRIGHT

Copyright (c) 1988-2026 Free Software Foundation, Inc.

Autorisation est donnée de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License, version 1.3 ou ultérieure publiée par la fondation Free Software Foundation, sans sections invariantes, sans texte de couverture et sans texte de dos de couverture. Une copie de la licence figure dans la section « GNU Free Documentation License ».

TRADUCTION

La traduction française de cette page de manuel a été créée par Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.

21 octobre 2026 binutils-2.47.50