Performance is een van de grootste uitdagingen voor programmeurs bij het ontwikkelen van software. Dat is de reden waarom codeprofilering een van de belangrijkste aspecten van softwareontwikkeling is, omdat het u in staat stelt knelpunten, dode code en zelfs fouten te identificeren. Als u een programmeur bent die softwaretoepassingen voor Linux ontwikkelt, is de GNU profiler "gprof" de tool om op te letten.

Download en installeer

Gprof komt vooraf geïnstalleerd met de meeste Linux-distributies, maar als dat niet het geval is met je Linux distro, kun je het downloaden en installeren via een commandoregel-pakketbeheerder zoals apt-get of yum . Voer bijvoorbeeld de volgende opdracht uit om gprof op Debian-gebaseerde systemen te downloaden en te installeren:

 sudo apt-get install binutils 

Vereisten

Voordat u gprof gebruikt om profileringsgegevens te genereren, moet u ervoor zorgen dat uw programma-uitvoerbare bestand extra informatie bevat die de profiler nodig heeft om goed te kunnen werken. Dit kan worden bereikt door de opdrachtregeloptie -pg toe te voegen tijdens het compileren van uw code, ervan uitgaande dat u de gcc compiler gebruikt. Als u afzonderlijke opdrachten gebruikt voor compileren en koppelen, voegt u de opdrachtregeloptie toe aan beide opdrachten.

Gebruik van gprof

Beschouw het volgende C-programma als een voorbeeld:

 # include void func2 () {int count = 0; for (count = 0; count <0XFFFFF; count ++); terug te keren; } void func1 (void) {int count = 0; for (count = 0; count <0XFF; count ++) func2 (); terug te keren; } int main (void) {printf ("\ n Hello World! \ n"); func1 (); func2 (); retourneer 0; } 

Zoals beschreven in de vorige sectie, compileer de code met de optie -pg :

 gcc -Wall -pg test.c -o-test 

Eenmaal gecompileerd, voer het programma uit:

 ./test 

Na succesvolle uitvoering zal het programma een bestand met de naam "gmon.out" produceren dat de profileringsinformatie bevat, maar in een onbewerkte vorm, wat betekent dat u het bestand niet kunt openen en de informatie direct kunt lezen. Om een ​​door mensen leesbaar bestand te genereren, voert u de volgende opdracht uit:

 gprof test gmon.out> prof_output 

Deze opdracht schrijft alle profileringsinformatie in een door mensen leesbaar formaat naar het bestand "prof_output". Merk op dat u de naam van het uitvoerbestand naar eigen inzicht kunt wijzigen.

Vlak profiel en oproepgrafiek

Als u het bestand met profileringsgegevens opent, ziet u dat de informatie in twee delen is verdeeld: vlak profiel en oproepgrafiek. Terwijl de eerste details bevat zoals functieaanroepentellingen, totale uitvoeringstijd doorgebracht in een functie en meer, beschrijft de laatste de oproepboom van het programma, en verschaft details over de ouder- en kindfuncties van een bepaalde functie.

Het volgende is bijvoorbeeld het vlakke profiel in ons geval:

 Elk monster telt als 0.01 seconden. % cumulatieve zelf-zelf-totaaltijd seconden seconden oproepen ms / oproep ms / oproepnaam 100, 00 0, 94 0, 94 256 3, 67 3, 67 func2 0, 00 0, 94 0, 00 1 0, 00 936, 33 func1 

Het onderstaande is de oproepgrafiek:

 index% tijd zelfkinderen genaamd naam 0.00 0.00 1/256 hoofd [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 op dat de gedetailleerde uitleg van deze velden aanwezig is in het bestand met profileringsinformatie (prof_output in dit geval) en wordt gegenereerd elke keer dat de profiler wordt uitgevoerd. Gebruik de opdrachtregeloptie -b met de opdracht gprof om de details uit te schakelen.

Enkele belangrijke punten

  • Om het bestand gmon.out correct te kunnen schrijven, moet je programma normaal afsluiten. Het bestand wordt niet geproduceerd wanneer het programma wordt afgesloten door de functie _exit() aan te roepen of abnormaal wordt beëindigd vanwege een niet-behandeld signaal.
  • Het bestand "gmon.out" wordt altijd in de huidige werkmap gemaakt. Zorg er dus voor dat uw programma voldoende rechten heeft om een ​​bestand in de huidige map te maken.
  • Een externe tool met de naam gprof2dot kan worden gebruikt om de callgraph van gprof naar grafische vorm om te zetten.
  • Met behulp van gprof kunt u ook een geannoteerde bronvermelding maken die een idee geeft van het aantal keren dat elke regel van het programma is uitgevoerd. Om deze informatie te produceren, compileer het programma met -g (samen met de optie -pg eerder uitgelegd) en voer de opdracht gprof uit met de opdrachtregeloptie -A .