Sådan profilerer du et C-program i Linux ved hjælp af GNU gprof
Ydeevne er en af de største udfordringer, som programmører står overfor, mens man udvikler software. Derfor er kodeprofilering et af de vigtigste aspekter ved softwareudvikling, da det lader dig identificere flaskehalse, død kode og endda fejl. Hvis du er en programmør, der udvikler softwareprogrammer til Linux, er GNU profiler "gprof" det redskab til at passe på.
Download og installer
Gprof leveres forudinstalleret med de fleste Linux-distributioner, men hvis det ikke er tilfældet med din Linux distro, kan du downloade og installere det via en kommandolinjepakkehåndtering som apt-get
eller yum
. Kør f.eks. Følgende kommando for at downloade og installere gprof på Debian-baserede systemer:
sudo apt-get install binutils
Krav
Før du bruger gprof til at generere profildata, skal du sørge for, at dit programkørbar indeholder ekstra information, som profileren kræver, for at fungere korrekt. Dette kan opnås ved at tilføje kommandolinjens -pg
opsætning, mens du compiler din kode, forudsat at du bruger gcc
kompilatoren. Hvis du bruger separate kommandoer til kompilering og linking, skal du tilføje kommandolinjevalg til begge kommandoer.
Brug af gprof
Overvej følgende C-program som et eksempel:
#include void func2 () {int count = 0; for (count = 0; count <0XFFFFF; count ++); Vend tilbage; } void func1 (void) {int count = 0; for (count = 0; count <0XFF; count ++) func2 (); Vend tilbage; } int main (void) {printf ("\ n Hej verden! \ n"); func1 (); func2 (); returnere 0; }
Som beskrevet i det foregående afsnit, kompilere koden med -pg
indstillingen:
gcc -Wall -pg test.c -o test
Når du har lavet det, skal du køre programmet:
./prøve
Efter en vellykket udførelse vil programmet producere en fil med navnet "gmon.out", der indeholder profiloplysningerne, men i en rå form, hvilket betyder at du ikke kan åbne filen og direkte læse oplysningerne. For at generere en menneskelig læsbar fil, kør følgende kommando:
gprof test gmon.out> prof_output
Denne kommando skriver alle profileringsoplysningerne i menneskeligt læseligt format til "prof_output" -filen. Bemærk at du kan ændre uddatafilnavnet som det passer dig.
Flad profil og Opkaldsdiagram
Hvis du åbner filen, der indeholder profildata, kan du se, at oplysningerne er opdelt i to dele: Flad profil og Opkaldsdiagram. Mens den førstnævnte indeholder detaljer som funktionsopkaldstællinger, den samlede udførelsestid brugt i en funktion og mere, sidstnævnte beskriver opkaldstræet i programmet, der giver detaljer om forældrenes og barnets funktioner i en bestemt funktion.
For eksempel er følgende Flat profilen i vores tilfælde:
Hver prøve tæller som 0, 01 sekunder. % kumulativ selvtillid total tid sekunder sekunder opkald ms / opkald ms / opkald navn 100, 00 0, 94 0, 94 256 3, 67 3, 67 func2 0, 00 0, 94 0, 00 1 0, 00 936, 33 func1
Nedenfor er opkaldsgrafen:
indeks% tid selvbørn kaldt navn 0.00 0.00 1/256 hoved [2] 0, 94 0, 00 255/256 func1 [3] [1] 100, 0 0, 94 0, 00 256 func2 [1] -------------- --------------------------------- [2] 100.0 0.00 0.94 main [2] 0.00 0.94 1/1 func1 [ 3] 0, 00 0, 00 1/256 func2 [1] --------------------------------------- -------- 0, 00 0, 94 1/1 hoved [2] [3] 99, 6 0, 00 0, 94 1 func1 [3] 0, 94 0, 00 255/256 func2 [1] ------------- ----------------------------------
Bemærk, at den detaljerede forklaring af disse felter er til stede i filen, der indeholder profileringsoplysninger (prof_output i dette tilfælde) og genereres hver gang profilet køres. For at slukke for detaljerne skal du bruge kommandolinjen -b
med gprof
kommandoen.
Nogle vigtige punkter
- For at skrive
gmon.out
filen korrekt skal dit program gå ud af normal. Filen produceres ikke, når programmet enten afslutter ved at kalde funktionen_exit()
eller abnormalt afslutter på grund af et_exit()
signal. - Filen "gmon.out" oprettes altid i den aktuelle arbejdsmappe. Sørg derfor for, at dit program har tilstrækkelige rettigheder til at oprette en fil i den aktuelle mappe.
- Et eksternt værktøj med navnet gprof2dot kan bruges til at konvertere opkaldsgrafen fra gprof til grafisk form.
- Ved hjælp af gprof kan du også producere en annoteret kildeoversigt, der giver en ide om, hvor mange gange hver linje af programmet blev udført. For at producere disse oplysninger, kompilere programmet med
-g
(sammen med-pg
alternativet forklaret tidligere) og kørgprof
kommandoen med-A
kommandolinjevalg.