Le profileur GNU standard, gprof, est disponible pour la plupart des systèmes de type Unix. gprof fait partie de la chaîne d'outils GNU et a été l'un des premiers outils de profilage de code open source. Il combine une instrumentation au moment de la compilation et des techniques d'échantillonnage, en utilisant une fréquence d'échantillonnage de 100 Hz. Il a l'avantage de ne pas nécessiter de prise en charge du noyau.
Pour préparer un programme pour le profilage avec gprof, vous ajoutez -pg aux drapeaux de compilation et de liaison, qui injecte du code qui collecte des informations sur l'arbre d'appel dans le préambule de la fonction. Lorsque vous exécutez le programme, les échantillons sont collectés et stockés dans un tampon, qui est écrit dans un fichier nommé gmon.out lorsque le programme se termine.
si vous rencontrez l'erreur ci-dessous lors de l'exécution de la commande gprof :
vous pouvez essayer d'installer le package binutils comme indiqué ci-dessous selon votre choix de distribution.
Répartition | Commande |
---|---|
OS X | brew install binutils |
Debian | apt-get install binutils |
Ubuntu | apt-get install binutils |
Alpin | apk ajouter binutils |
Arch Linux | pacman -S binutils |
Kali Linux | apt-get install binutils |
CentOS | yum installer binutils |
Fédora | dnf install binutils |
Raspbian | apt-get install binutils |
gprof affiche les données de profil d'un fichier objet. La table de symboles du fichier est comparée au fichier de profil de graphe d'appels gmon.out (précédemment créé en compilant avec gcc -pg). De nombreuses options de gprof prennent un argument de spécification de symbole, ou symspec, pour limiter l'option aux fichiers ou fonctions spécifiés. La symspec peut être un nom de fichier, une fonction ou un numéro de ligne. Il peut également être donné sous la forme filename:function ou filename:linenumber pour spécifier une fonction ou un numéro de ligne dans un fichier spécifique. gprof s'attend à ce que les noms de fichiers contiennent un point et que les fonctions ne contiennent pas de point.