Η απόδοση είναι μία από τις μεγαλύτερες προκλήσεις που αντιμετωπίζουν οι προγραμματιστές κατά την ανάπτυξη λογισμικού. Αυτός είναι ο λόγος για τον οποίο η κωδικοποίηση προφίλ είναι μια από τις πιο σημαντικές πτυχές της ανάπτυξης λογισμικού, καθώς σας επιτρέπει να εντοπίσετε σημεία συμφόρησης, νεκρό κώδικα και ακόμη και σφάλματα. Εάν είστε προγραμματιστής που αναπτύσσει εφαρμογές λογισμικού για το Linux, ο προφίλ GNU "gprof" είναι το εργαλείο που πρέπει να προσέξετε.

Λήψη και εγκατάσταση

Το Gprof έρχεται προεγκατεστημένο με τις περισσότερες διανομές Linux, αλλά αν δεν συμβαίνει αυτό με το Linux distro, μπορείτε να το κατεβάσετε και να το εγκαταστήσετε μέσω ενός διαχειριστή πακέτων γραμμής εντολών όπως apt-get ή yum . Για παράδειγμα, εκτελέστε την ακόλουθη εντολή για να κάνετε λήψη και εγκατάσταση του gprof σε συστήματα που βασίζονται στο Debian:

 sudo apt-get να εγκαταστήσετε binutils 

Απαιτήσεις

Προτού χρησιμοποιήσετε το gprof για τη δημιουργία δεδομένων δημιουργίας προφίλ, βεβαιωθείτε ότι το εκτελέσιμο πρόγραμμα του προγράμματος περιέχει επιπλέον πληροφορίες που απαιτούνται από τον profiler για να λειτουργήσει σωστά. Αυτό μπορεί να επιτευχθεί προσθέτοντας την επιλογή γραμμής εντολών -pg κατά τη σύνταξη του κώδικα σας, υποθέτοντας ότι χρησιμοποιείτε τον μεταγλωττιστή gcc . Εάν χρησιμοποιείτε ξεχωριστές εντολές για τη σύνταξη και τη σύνδεση, προσθέστε την επιλογή γραμμής εντολών και στις δύο εντολές.

Χρησιμοποιώντας το gprof

Εξετάστε το ακόλουθο πρόγραμμα C ως παράδειγμα:

 #include void func2 () {int count = 0; για (count = 0, count <0XFFFFF, count ++). ΕΠΙΣΤΡΟΦΗ; } void func1 (άκυρη) {int count = 0; για (count = 0, count <0XFF; count ++) func2 (); ΕΠΙΣΤΡΟΦΗ; } int main (κενό) {printf ("\ n Hello World! \ n"); func1 (); func2 (); επιστροφή 0? }} 

Όπως περιγράφεται στην προηγούμενη ενότητα, συντάξτε τον κώδικα με την επιλογή -pg :

 gcc -Wall -pg test.c -o δοκιμή 

Μετά τη σύνταξη, εκτελέστε το πρόγραμμα:

 ./δοκιμή 

Μετά την επιτυχή εκτέλεση, το πρόγραμμα θα δημιουργήσει ένα αρχείο με το όνομα "gmon.out" που περιέχει τις πληροφορίες σχεδίασης, αλλά σε ωμή μορφή, που σημαίνει ότι δεν μπορείτε να ανοίξετε το αρχείο και να διαβάσετε απευθείας τις πληροφορίες. Για να δημιουργήσετε ένα αρχείο αναγνώσιμο από τον άνθρωπο, εκτελέστε την ακόλουθη εντολή:

 test gprof gmon.out> prof_output 

Αυτή η εντολή καταγράφει όλες τις πληροφορίες σχεδίασης σε μορφή αναγνώσιμη από άνθρωπο σε αρχείο "prof_output". Σημειώστε ότι μπορείτε να αλλάξετε το όνομα του αρχείου εξόδου όπως σας εξυπηρετεί.

Επίπεδο προφίλ και γράφημα κλήσεων

Εάν ανοίξετε το αρχείο που περιέχει δεδομένα δημιουργίας προφίλ, θα δείτε ότι οι πληροφορίες χωρίζονται σε δύο μέρη: Επίπεδο προφίλ και Γραφή κλήσης. Ενώ το πρώτο περιέχει λεπτομέρειες όπως μετρήσεις κλήσεων λειτουργίας, συνολικός χρόνος εκτέλεσης σε μια λειτουργία και πολλά άλλα, ο τελευταίος περιγράφει το δέντρο κλήσεων του προγράμματος, παρέχοντας λεπτομέρειες για τις γονικές και παιδικές λειτουργίες μιας συγκεκριμένης λειτουργίας.

Για παράδειγμα, το παρακάτω είναι το επίπεδο προφίλ στην περίπτωσή μας:

 Κάθε δείγμα μετρά ως 0, 01 δευτερόλεπτα. % αθροιστική αυτοδύναμη συνολική διάρκεια δευτερόλεπτα δευτερόλεπτα κλήσεις ms / κλήση ms / ονομασία κλήσης 100.00 0.94 0.94 256 3.67 3.67 func2 0.00 0.94 0.00 1 0.00 936.33 func1 

Το παρακάτω είναι το γράφημα κλήσεων:

 δείκτης% χρόνος αυτο παιδιά ονομαζόμενος όνομα 0.00 0.00 1/256 κύρια [2] 0.94 0.00 255/256 func1 [1] 100.0 0.94 0.00 256 func2 [1] -------------- --------------------------------- [2] 100.0 0.00 0.94 κύρια [2] 0.00 0.94 1/1 func1 [ 3] 0.00 0.00 1/256 func2 [1] --------------------------------------- -------- 0.00 0.94 1/1 κύρια [2] [3] 99.6 0.00 0.94 1 func1 [3] 0.94 0.00 255/256 func2 [1] ------------- -------------------------------------------------- 

Σημειώστε ότι η λεπτομερής εξήγηση αυτών των πεδίων υπάρχει στο αρχείο που περιέχει πληροφορίες προφίλ (prof_output σε αυτή την περίπτωση) και δημιουργείται κάθε φορά που εκτελείται ο profiler. Για να απενεργοποιήσετε τις λεπτομέρειες, χρησιμοποιήστε την επιλογή γραμμής εντολών -b με την εντολή gprof .

Μερικά Σημαντικά Σημεία

  • Για να γράψετε σωστά το αρχείο gmon.out, το πρόγραμμά σας πρέπει να βγει κανονικά. Το αρχείο δεν παράγεται όταν το πρόγραμμα εξέρχεται καλώντας τη λειτουργία _exit() ή τερματίζει ασυνήθιστα λόγω ενός σήματος χωρίς χειρισμό.
  • Το αρχείο "gmon.out" δημιουργείται πάντα στον τρέχοντα κατάλογο εργασίας. Έτσι, βεβαιωθείτε ότι το πρόγραμμά σας διαθέτει επαρκή δικαιώματα για να δημιουργήσετε ένα αρχείο στον τρέχοντα κατάλογο.
  • Ένα εξωτερικό εργαλείο με το όνομα gprof2dot μπορεί να χρησιμοποιηθεί για τη μετατροπή του γράφου κλήσης από το gprof σε γραφική μορφή.
  • Χρησιμοποιώντας το gprof, μπορείτε επίσης να δημιουργήσετε μια λίστα σχολιασμένων πηγών που δίνει μια ιδέα για το πόσες φορές εκτελέστηκε κάθε γραμμή του προγράμματος. Για να δημιουργήσετε αυτές τις πληροφορίες, συντάξτε το πρόγραμμα με το -g (μαζί με την επιλογή -pg που επεξηγήθηκε νωρίτερα) και εκτελέστε την εντολή gprof με την επιλογή -A γραμμής εντολών.