GPROF(1) GNU GPROF(1)

gprof - afișează datele de profil ale graficului de apeluri

gprof [ -[abcDhilLrsTvwxyz] ] [ -[ABCeEfFJnNOpPqQRStZ][nume] ]
[ -I directoare ] [ -d[număr] ] [ -k de_la/până_la ]
[ -m nr-min-cicluri ] [ -R fișier-corespondențe ] [ -t lungime-tabel ]
[ --[no-]annotated-source[=nume] ]
[ --[no-]exec-counts[=nume] ]
[ --[no-]flat-profile[=nume] ] [ --[no-]graph[=nume] ]
[ --[no-]time=nume] [ --all-lines ] [ --brief ]
[ --debug[=nivel] ] [ --function-ordering ]
[ --file-ordering fișier-corespondențe ] [ --directory-path=directoare ]
[ --display-unused-functions ] [ --file-format=nume ]
[ --file-info ] [ --help ] [ --line ] [ --inline-file-names ]
[ --min-count=n ] [ --no-static ] [ --print-path ]
[ --separate-files ] [ --static-call-graph ] [ --sum ]
[ --table-length=lungime ] [ --traditional ] [ --version ]
[ --width=n ] [ --ignore-non-functions ]
[ --demangle[=STIL] ] [ --no-demangle ]
[--external-symbol-table=nume]
[ fișier-imagine ] [ fișier-profil ... ]

«gprof» produce un profil de execuție a programelor C, Pascal sau Fortran77. Efectul rutinelor apelate este încorporat în profilul fiecărui apelant. Datele profilului sunt preluate din fișierul de profil al graficului de apeluri (gmon.out implicit) care este creat de programele compilate cu opțiunea -pg a „cc”, „pc” și „f77”. Opțiunea -pg face legătura și cu versiunile rutinelor de bibliotecă care sunt compilate pentru profilare. «gprof» citește fișierul obiect dat (valoarea implicită este „a.out”) și stabilește relația dintre tabelul său de simboluri și profilul graficului de apeluri din gmon.out. În cazul în care sunt specificate mai multe fișiere de profil, rezultatul «gprof» arată suma informațiilor de profil din fișierele de profil date.

«gprof» calculează cantitatea de timp petrecută în fiecare rutină. Apoi, aceste durate sunt propagate de-a lungul marginilor graficului de apeluri. Se descoperă cicluri, iar apelurile în cadrul unui ciclu sunt efectuate pentru a împărți timpul ciclului.

În urma analizei sunt disponibile mai multe formate de rezultate.

Profilul plan arată cât timp a petrecut programul dvs. în fiecare funcție și de câte ori a fost apelată funcția respectivă. Dacă doriți pur și simplu să știți ce funcții consumă cele mai multe cicluri, acest lucru este precizat concis aici.

Graficul de apelare arată, pentru fiecare funcție, ce funcții au apelat-o, ce alte funcții au fost apelate și de câte ori. Există, de asemenea, o estimare a timpului petrecut în subrutinele fiecărei funcții. Acest lucru poate sugera locuri în care ați putea încerca să eliminați apelurile de funcții care consumă mult timp.

Lista sursă adnotată este o copie a codului sursă al programului, etichetată cu numărul de ori de câte ori a fost executată fiecare linie a programului.

Aceste opțiuni specifică pe care dintre diferitele formate de ieșire trebuie să-l producă «gprof».

Multe dintre aceste opțiuni acceptă un argument specificare-simbol opțional pentru a specifica funcțiile care trebuie incluse sau excluse. Aceste opțiuni pot fi specificate de mai multe ori, cu diferite argumente „specificare-simbol”, pentru a include sau exclude seturi de simboluri.

Specificarea oricăreia dintre aceste opțiuni înlocuiește opțiunea implicită (-p -q), care afișează un profil plan și o analiză grafică a apelurilor pentru toate funcțiile.

"-A[symspec]"
"--annotated-source[=symspec]"
Opțiunea -A face ca «gprof» să afișeze codul sursă adnotat. Dacă este specificat argumentul specificare-simbol, imprimă numai ieșirea pentru simbolurile corespunzătoare.
"-b"
"--brief"
Specificarea oricăreia dintre aceste opțiuni înlocuiește opțiunea implicită (-p -q), care afișează un profil plan și o analiză grafică a apelurilor pentru toate funcțiile.
"-B"
Opțiunea -B face ca «gprof» să afișeze analiza grafică a apelurilor.
"-C[symspec]"
"--exec-counts[=symspec]"
Opțiunea -C face ca «gprof» să afișeze o listă a funcțiilor și numărul de apeluri pentru fiecare dintre ele. Dacă este specificat argumentul specificare-simbol, imprimă contorizarea numai pentru simbolurile care corespund.

În cazul în care fișierul de date de profil conține înregistrări de numărare a blocurilor de bază, specificarea opțiunii -l, împreună cu -C, va determina numărarea și afișarea numărului de execuții ale blocurilor de bază.

"-i"
"--file-info"
Opțiunea -i face ca «gprof» să afișeze informații sumare despre fișierul (fișierele) de date de profil și apoi să iasă. Se afișează numărul de înregistrări ale histogramei, ale graficului de apeluri și ale numărului de blocuri de bază.
"-I dirs"
"--directory-path=dirs"
Opțiunea -I specifică o listă de directoare de căutare în care se caută fișierele sursă. Variabila de mediu GPROF_PATH poate fi, de asemenea, utilizată pentru a transmite aceste informații. Se utilizează mai ales pentru ieșirea de surse adnotate.
"-J[symspec]"
"--no-annotated-source[=symspec]"
Opțiunea -J face ca «gprof» să nu afișeze codul sursă adnotat. Dacă se specifică argumentul specificare-simbol, «gprof» afișează codul sursă adnotat, dar exclude simbolurile corespunzătoare.
"-L"
"--print-path"
În mod normal, numele fișierelor sursă sunt afișate cu componenta de rută suprimată. Opțiunea -L face ca «gprof» să afișeze numele de rută complet al numelor de fișiere sursă, care este determinat din informațiile simbolice de depanare din fișierul imagine și este relativ la directorul în care a fost invocat compilatorul.
"-p[symspec]"
"--flat-profile[=symspec]"
Opțiunea -p face ca «gprof» să afișeze un profil plan. Dacă este specificatargumentul specificare-simbol, imprimă profilul plan numai pentru simbolurile corespunzătoare.
"-P[symspec]"
"--no-flat-profile[=symspec]"
Opțiunea -P face ca «gprof» să suprime imprimarea unui profil plan. Dacă se specifică argumentul specificare-simbol, «gprof» afișează un profil plan, dar exclude simbolurile corespunzătoare.
"-q[symspec]"
"--graph[=symspec]"
Opțiunea -q face ca «gprof» să afișeze analiza grafică a apelurilor. Dacă se specifică argumentul specificare-simbol, imprimă graficul de apeluri numai pentru simbolurile corespunzătoare și pentru copiii acestora.
"-Q[symspec]"
"--no-graph[=symspec]"
Opțiunea -Q face ca «gprof» să suprime afișarea graficului de apeluri. Dacă se specifică argumentul specificare-simbol, «gprof» afișează un grafic de apeluri, dar exclude simbolurile corespunzătoare.
"-t"
"--table-length=num"
Opțiunea -t face ca, atunci când este activată adnotarea sursei, să fie listate cele mai active linii de sursă număr din fiecare fișier sursă. Opțiunea implicită este 10.
"-y"
"--separate-files"
Această opțiune afectează doar ieșirea sursei adnotate. În mod normal, «gprof» imprimă fișierele sursă adnotate la ieșirea standard. Dacă se specifică această opțiune, sursa adnotată pentru un fișier numit rută/către/nume_fișier este generată în fișierul nume_fișier-ann. În cazul în care sistemul de fișiere subiacent ar trunchia nume_fișier-ann astfel încât să suprascrie originalul nume_fișier, «gprof» generează sursa adnotată în fișierul nume_fișier.ann în locul acestuia (dacă numele original al fișierului are o extensie, această extensie este înlocuită cu .ann).
"-Z[symspec]"
"--no-exec-counts[=symspec]"
Opțiunea -Z face ca «gprof» să nu afișeze o listă a funcțiilor și numărul de apeluri pentru fiecare dintre ele. Dacă este specificat argumentul specificare-simbol, imprimă numărătoarea, dar exclude simbolurile corespunzătoare.
"-r"
"--function-ordering"
Opțiunea --function-ordering face ca «gprof» să afișeze o sugestie de ordonare a funcțiilor pentru program pe baza datelor de profilare. Această opțiune sugerează o ordonare care poate îmbunătăți comportamentul de paginare, tlb și cache pentru program pe sistemele care acceptă ordonarea arbitrară a funcțiilor într-un executabil.

Detaliile exacte ale modului în care se forțează editorul de legături să plaseze funcțiile într-o anumită ordine depind de sistem și nu fac obiectul acestui manual.

"-R map_file"
"--file-ordering map_file"
Opțiunea --file-ordering face ca «gprof» să afișeze o sugestie de ordonare a liniilor de legătură .o pentru program pe baza datelor de profilare. Această opțiune sugerează o ordonare care poate îmbunătăți comportamentul de paginare, tlb și cache pentru program pe sistemele care nu acceptă ordonarea arbitrară a funcțiilor într-un executabil.

Utilizarea argumentului -a este foarte recomandată cu această opțiune.

Argumentul fișier-corespondențe este un nume de rută către un fișier care furnizează corespondențe între numele funcției și fișierul obiect. Formatul fișierului este similar cu cel al ieșirii programului «nm».

 c-parse.o:00000000 T yyparse  c-parse.o:00000004 C yyerrflag 
c-lang.o:00000000 T maybe_objc_method_name  c-lang.o:00000000 T
print_lang_statistics  c-lang.o:00000000 T recognize_objc_keyword 
c-decl.o:00000000 T print_lang_identifier  c-decl.o:00000000 T
print_lang_type  ...

Pentru a crea un fișier-corespondențe cu GNU «nm», tastați o comandă precum «nm --extern-only --defined-only -v --print-file-name program-name».

"-T"
"--traditional"
Opțiunea -T face ca «gprof« să afișeze ieșirea în stilul BSD „tradițional”.
"-w width"
"--width=width"
Stabilește lățimea liniilor de ieșire la lățime. În prezent, se utilizează numai la imprimarea indexului funcției în partea de jos a graficului de apeluri.
"-x"
"--all-lines"
Această opțiune afectează doar ieșirea sursei adnotate. În mod implicit, sunt adnotate numai liniile de la începutul unui bloc de bază. Dacă se specifică această opțiune, fiecare linie dintr-un bloc de bază este adnotată prin repetarea adnotării pentru prima linie. Acest comportament este similar cu «tcov -a».
"--demangle[=style]"
"--no-demangle"
Aceste opțiuni controlează dacă numele simbolurilor C++ trebuie să fie separate la imprimarea rezultatelor. Opțiunea implicită este să se decodifice simbolurile. Opțiunea „--no-demangle” poate fi utilizată pentru a dezactiva decodificarea. Compilatoare diferite au stiluri diferite de codificare. Argumentul opțional „stil decodificare” poate fi utilizat pentru a alege un stil de decodificare adecvat pentru compilatorul dumneavoastră.

Opțiuni de analiză

"-a"
"--no-static"
Opțiunea -a face ca «gprof» să suprime afișarea funcțiilor declarate static (private); (acestea sunt funcții ale căror nume nu sunt listate ca fiind globale și care nu sunt vizibile în afara fișierului/funcției/blocului în care au fost definite). Timpul petrecut în aceste funcții, apelurile către/de la acestea etc., vor fi toate atribuite funcției care a fost încărcată direct înaintea ei în fișierul executabil. Această opțiune afectează atât profilul plan, cât și graficul de apeluri.
"-c"
"--static-call-graph"
Opțiunea -c face ca graficul de apeluri al programului să fie mărit cu o euristică care examinează spațiul de text al fișierului obiect și identifică apelurile de funcții în codul binar al mașinii. Deoarece înregistrările normale ale graficului de apeluri sunt generate numai atunci când sunt introduse funcții, această opțiune identifică copii care ar fi putut fi apelați, dar nu au fost niciodată. Apelurile către funcții care nu au fost compilate cu profilarea activată sunt, de asemenea, identificate, dar numai dacă sunt prezente intrări în tabela de simboluri pentru acestea. Apelurile către rutinele bibliotecii dinamice nu sunt de obicei găsite de această opțiune. Părinții sau copiii identificați prin intermediul acestei euristici sunt indicați în graficul de apeluri cu un număr de apeluri de 0.
"-D"
"--ignore-non-functions"
Opțiunea -D face ca «gprof» să ignore simbolurile despre care nu se știe că sunt funcții. Această opțiune va oferi date de profil mai precise pe sistemele în care este suportată (Solaris și HPUX, de exemplu).
"-k from/to"
Opțiunea -k vă permite să ștergeți din graficul de apelare toate arcurile de la simbolurile care corespund de_la specificare-simbol la cele care corespund până_la specificare-simbol.
"-l"
"--line"
Opțiunea -l activează profilarea linie cu linie, ceea ce face ca rezultatele histogramei să fie încărcate pe linii individuale de cod sursă, în loc de funcții. Această caracteristică funcționează numai cu programe compilate de versiuni mai vechi ale compilatorului «gcc». Versiunile mai noi de «gcc» sunt concepute pentru a funcționa în schimb cu instrumentul «gcov».

Dacă programul a fost compilat cu contorizarea blocurilor de bază activată, această opțiune va identifica, de asemenea, de câte ori a fost executată fiecare linie de cod. În timp ce profilarea linie cu linie poate ajuta la izolarea locului într-o funcție mare în care un program își petrece timpul, aceasta crește semnificativ timpul de execuție al «gprof» și amplifică inexactitățile statistice.

"--inline-file-names"
Această opțiune face ca «gprof» să afișeze fișierul sursă după fiecare simbol, atât în profilul plan, cât și în graficul de apeluri. Ruta completă a fișierului este imprimată dacă este utilizată împreună cu opțiunea -L.
"-m num"
"--min-count=num"
Această opțiune afectează doar numărul de execuții. Simbolurile care sunt executate de mai puțin de număr ori sunt suprimate.
"-nsymspec"
"--time=symspec"
Opțiunea -n face ca «gprof», în analiza grafică a apelurilor, să propage timpii numai pentru simbolurile care corespund cu specificare-simbol.
"-Nsymspec"
"--no-time=symspec"
Opțiunea -n face ca «gprof», în analiza grafică a apelurilor, să nu propage timpii pentru simbolurile care corespund cu specificare-simbol.
"-Sfilename"
"--external-symbol-table=filename"
Opțiunea -S face ca «gprof» să citească un fișier extern de tabele de simboluri, cum ar fi /proc/kallsyms, în loc să citească tabelul de simboluri din fișierul obiect dat (opțiunea implicită este „a.out”). Acest lucru este util pentru profilarea modulelor de nucleu.
"-z"
"--display-unused-functions"
Dacă dați opțiunea -z, «gprof» va menționa toate funcțiile din profilul plan, chiar și pe cele care nu au fost apelate niciodată și care nu au avut timp petrecut în ele. Acest lucru este util împreună cu opțiunea -c pentru a descoperi ce rutine nu au fost niciodată apelate.

Opțiuni diverse

"-d[num]"
"--debug[=num]"
Opțiunea -d număr specifică opțiunile de depanare. Dacă argumentul număr nu este specificat, activează toate depanările.
"-h"
"--help"
Opțiunea -h afișează utilizarea liniei de comandă.
"-Oname"
"--file-format=name"
Selectează formatul fișierelor de date de profil. Formatele recunoscute sunt auto (implicit), bsd, 4.4bsd, magic și prof (încă nu este acceptat).
"-s"
"--sum"
Opțiunea -s determină «gprof» să rezume informațiile din fișierele de date de profil pe care le-a citit și să scrie un fișier de date de profil numit gmon.sum, care conține toate informațiile din fișierele de date de profil pe care «gprof» le-a citit. Fișierul gmon.sum poate fi unul dintre fișierele de intrare specificate; acest lucru are ca efect fuzionarea datelor din celelalte fișiere de intrare în gmon.sum.

Eventual, puteți rula din nou «gprof» fără -s pentru a analiza datele cumulative din fișierul gmon.sum.

"-v"
"--version"
Opțiunea -v face ca «gprof» să afișeze numărul versiunii curente și apoi să iasă.

Opțiuni învechite

Aceste opțiuni au fost înlocuite cu versiuni mai noi care utilizează argumentele „specificare-simbol”.

"-e function_name"
Opțiunea -e funcție îi indică lui «gprof» să nu afișeze informații despre funcția nume-funcție (și copiii săi...) în graficul de apeluri. Funcția va fi în continuare listată ca fiind un copil al oricărei funcții care o apelează, dar numărul său de index va fi afișat ca [not printed]. Se pot da mai multe opțiuni -e; cu fiecare opțiune -e poate fi indicat doar un singur argument nume-funcție.
"-E function_name"
Opțiunea „-E funcție” funcționează la fel ca opțiunea „-e”, dar timpul petrecut în funcție (și copiii care nu au fost apelați din altă parte) nu va fi utilizat pentru a calcula procentele de timp pentru graficul de apeluri. Se pot da mai multe opțiuni -E; cu fiecare opțiune -E poate fi indicat doar un singur argument nume-funcției.
"-f function_name"
Opțiunea -f funcție face ca «gprof» să limiteze graficul de apeluri la funcția numele_funcției și la copiii acesteia (și la copiii acestora...). Se pot da mai multe opțiuni -f; cu fiecare opțiune -f poate fi indicat doar un singur argument nume-funcție.
"-F function_name"
Opțiunea -F funcție funcționează la fel ca opțiunea „-f”, dar numai timpul petrecut în funcție și în copiii acesteia (și copiii acestora...) va fi utilizat pentru a determina timpul total și procentele de timp pentru graficul de apeluri. Se pot da mai multe opțiuni -F; cu fiecare opțiune -F se poate indica doar un singur argument nume-funcție. Opțiunea -F prevalează asupra opțiunii -E.

"a.out"
lista de nume și spațiul pentru text.
"gmon.out"
graficul și profilul dinamic al apelurilor.
"gmon.sum"
rezumatul graficului dinamic al apelurilor și al profilului.

Finețea eșantionării este prezentată, dar rămâne în cel mai bun caz statistică. Presupunem că timpul pentru fiecare execuție a unei funcții poate fi exprimat prin timpul total al funcției împărțit la numărul de apeluri ale funcției. Astfel, timpul propagat de-a lungul arcurilor graficului de apelare către părinții funcției este direct proporțional cu numărul de ori de când este parcurs acel arc.

Părinții care nu sunt ei înșiși profilați vor avea timpul copiilor lor profilați propagat către ei, dar vor apărea ca fiind invocați spontan în listarea graficului de apeluri și nu vor avea timpul lor propagat mai departe. În mod similar, cei care captează semnale, chiar dacă sunt profilați, vor părea a fi spontani (deși din motive mai obscure). Orice copil profilat al captatorilor de semnal ar trebui să aibă timpii lor propagați în mod corespunzător, cu excepția cazului în care captatorul de semnal a fost invocat în timpul execuției rutinei de profilare, caz în care totul este pierdut.

Programul profilat trebuie să apeleze „exit”(2) sau să se întoarcă normal pentru ca informațiile de profilare să fie salvate în fișierul gmon.out.

monitor(3), profil(2), cc(1), prof(1), și intrarea Info pentru gprof.

„An Execution Profiler for Modular Programs”, de S. Graham, P. Kessler, M. McKusick; Software - Practice and Experience, Vol. 13, paginile 671-685, 1983.

„gprof: A Call Graph Execution Profiler”, de S. Graham, P. Kessler, M. McKusick; Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, No 6, paginile 120-126, iunie 1982.

Drepturi de autor © 1988-2024 Free Software Foundation, Inc.

Se acordă permisiunea de a copia, distribui și/sau modifica acest document în conformitate cu termenii Licenței GNU Free Documentation, versiunea 1.3 sau orice versiune ulterioară publicată de Free Software Foundation; fără secțiuni invariante, fără texte de copertă și fără texte de contra copertă. O copie a licenței este inclusă în secțiunea intitulată „GNU Free Documentation License”.

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

7 mai 2024 binutils-2.42.0