Ytelse er en av de største utfordringene programmerere står overfor mens du utvikler programvare. Det er derfor at kodeprofilering er et av de viktigste aspektene ved programvareutvikling, da det lar deg identifisere flaskehalser, død kode og til og med feil. Hvis du er en programmerer som utvikler programvare for Linux, er GNU profiler "gprof" det verktøyet å se etter.

Last ned og installer

Gprof kommer forhåndsinstallert med de fleste Linux-distribusjoner, men hvis det ikke er tilfelle med Linux-distroen din, kan du laste ned og installere den via en kommandolinjepakkebehandling som apt-get eller yum . Kjør for eksempel følgende kommando for å laste ned og installere gprof på Debian-baserte systemer:

 sudo apt-get install binutils 

Krav

Før du bruker gprof til å generere profildata, må du kontrollere at programkompatibel inneholder ekstra informasjon som kreves av profiler for å fungere skikkelig. Dette kan oppnås ved å legge til -pg kommandolinjealternativet mens du -pg koden din, forutsatt at du bruker gcc kompilatoren. Hvis du bruker separate kommandoer for kompilering og linking, legger du til kommandolinjevalg til begge kommandoene.

Bruke gprof

Vurder følgende C-program som et eksempel:

 #include void func2 () {int count = 0; for (telle = 0; telle <0XFFFFF; telle ++); komme tilbake; } void func1 (void) {int count = 0; for (count = 0; count <0XFF; count ++) func2 (); komme tilbake; } int main (void) {printf ("\ n Hei Verden! \ n"); func1 (); func2 (); returner 0; } 

Som beskrevet i forrige avsnitt, kompilere koden med -pg alternativet:

 gcc -Wall -pg test.c -o test 

Når du er ferdig, kjør programmet:

 ./test 

Etter vellykket utførelse vil programmet produsere en fil med navnet "gmon.out" som inneholder profileringsinformasjonen, men i en rå form, noe som betyr at du ikke kan åpne filen og lese informasjonen direkte. For å generere en menneskelig lesbar fil, kjør følgende kommando:

 gprof test gmon.out> prof_output 

Denne kommandoen skriver all profileringsinformasjon i menneskelig lesbart format til "prof_output" -filen. Vær oppmerksom på at du kan endre utdatafilenavnet som det passer deg.

Flat profil og Call graph

Hvis du åpner filen som inneholder profileringsdata, ser du at informasjonen er delt inn i to deler: Flat profil og Call graph. Mens den førstnevnte inneholder detaljer som funksjonsanropstall, totalt utførelsestid brukt i en funksjon og mer, beskriver sistnevnte kalltreet av programmet, og gir detaljer om foreldre- og barnfunksjonene til en bestemt funksjon.

For eksempel er følgende Flat profilen i vårt tilfelle:

 Hver prøve teller som 0, 01 sekunder. % kumulativ selvtillit total tid sekunder sekunder samtaler ms / samtale ms / samtale 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 anropsgrafen:

 indeks% tid selvbarn kalt 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 main [2] [3] 99.6 0.00 0.94 1 func1 [3] 0.94 0.00 255/256 func2 [1] ------------- ---------------------------------- 

Merk at den detaljerte forklaringen av disse feltene er til stede i filen som inneholder profileringsinformasjon (prof_output i dette tilfellet) og genereres hver gang profiler kjøres. For å slå av detaljene, bruk alternativet -b kommandolinje med gprof kommandoen.

Noen viktige poeng

  • For å skrive gmon.out filen på riktig måte, må programmet avsluttes normalt. Filen blir ikke produsert når programmet enten avsluttes ved å ringe _exit() -funksjonen eller abnormalt slutter på grunn av et _exit() signal.
  • Filen "gmon.out" er alltid opprettet i den nåværende arbeidskatalogen. Så sørg for at programmet har tilstrekkelige privilegier for å opprette en fil i gjeldende katalog.
  • Et eksternt verktøy med navnet gprof2dot kan brukes til å konvertere samtalediagrammet fra gprof til grafisk form.
  • Ved hjelp av gprof kan du også lage en merket kildeoppføring som gir en ide om hvor mange ganger hver linje av programmet ble utført. For å lage denne informasjonen, kompilere programmet med -g (sammen med -pg alternativet forklart tidligere) og kjør gprof kommandoen med -A kommandolinjevalg.