GPROF(1) GNU GPROF(1) NUME gprof - afieaza datele de profil ale graficului de apeluri SINOPSIS gprof [ -[abcDhilLrsTvwxyz] ] [ -[ABCeEfFJnNOpPqQRStZ][nume] ] [ -I directoare ] [ -d[numar] ] [ -k de_la/pana_la ] [ -m nr-min-cicluri ] [ -R fiier-corespondene ] [ -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 fiier-corespondene ] [ --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] [ fiier-imagine ] [ fiier-profil ... ] DESCRIERE <> produce un profil de execuie a programelor C, Pascal sau Fortran77. Efectul rutinelor apelate este incorporat in profilul fiecarui apelant. Datele profilului sunt preluate din fiierul de profil al graficului de apeluri (gmon.out implicit) care este creat de programele compilate cu opiunea -pg a ,,cc", ,,pc" i ,,f77". Opiunea -pg face legatura i cu versiunile rutinelor de biblioteca care sunt compilate pentru profilare. <> citete fiierul obiect dat (valoarea implicita este ,,a.out") i stabilete relaia dintre tabelul sau de simboluri i profilul graficului de apeluri din gmon.out. In cazul in care sunt specificate mai multe fiiere de profil, rezultatul <> arata suma informaiilor de profil din fiierele de profil date. <> calculeaza cantitatea de timp petrecuta in fiecare rutina. Apoi, aceste durate sunt propagate de-a lungul marginilor graficului de apeluri. Se descopera cicluri, iar apelurile in cadrul unui ciclu sunt efectuate pentru a impari timpul ciclului. In urma analizei sunt disponibile mai multe formate de rezultate. Profilul plan arata cat timp a petrecut programul dvs. in fiecare funcie i de cate ori a fost apelata funcia respectiva. Daca dorii pur i simplu sa tii ce funcii consuma cele mai multe cicluri, acest lucru este precizat concis aici. Graficul de apelare arata, pentru fiecare funcie, ce funcii au apelat-o, ce alte funcii au fost apelate i de cate ori. Exista, de asemenea, o estimare a timpului petrecut in subrutinele fiecarei funcii. Acest lucru poate sugera locuri in care ai putea incerca sa eliminai apelurile de funcii care consuma mult timp. Lista sursa adnotata este o copie a codului sursa al programului, etichetata cu numarul de ori de cate ori a fost executata fiecare linie a programului. OPIUNI Aceste opiuni specifica pe care dintre diferitele formate de ieire trebuie sa-l produca <>. Multe dintre aceste opiuni accepta un argument specificare-simbol opional pentru a specifica funciile care trebuie incluse sau excluse. Aceste opiuni pot fi specificate de mai multe ori, cu diferite argumente ,,specificare-simbol", pentru a include sau exclude seturi de simboluri. Specificarea oricareia dintre aceste opiuni inlocuiete opiunea implicita (-p -q), care afieaza un profil plan i o analiza grafica a apelurilor pentru toate funciile. "-A[symspec]" "--annotated-source[=symspec]" Opiunea -A face ca <> sa afieze codul sursa adnotat. Daca este specificat argumentul specificare-simbol, imprima numai ieirea pentru simbolurile corespunzatoare. "-b" "--brief" Daca este data opiunea -b, <> nu va imprima comentariile ample care incearca sa explice semnificaia tuturor campurilor din tabele. Acest lucru este util daca intenionai sa imprimai rezultatele sau daca v-ai saturat sa vedei comentarii ample asupra operaiilor ce se efectueaza. "-B" Opiunea -B face ca <> sa afieze analiza grafica a apelurilor. "-C[symspec]" "--exec-counts[=symspec]" Opiunea -C face ca <> sa afieze o lista a funciilor i numarul de apeluri pentru fiecare dintre ele. Daca este specificat argumentul specificare-simbol, imprima contorizarea numai pentru simbolurile care corespund. In cazul in care fiierul de date de profil conine inregistrari de numarare a blocurilor de baza, specificarea opiunii -l, impreuna cu -C, va determina numararea i afiarea numarului de execuii ale blocurilor de baza. "-i" "--file-info" Opiunea -i face ca <> sa afieze informaii sumare despre fiierul (fiierele) de date de profil i apoi sa iasa. Se afieaza numarul de inregistrari ale histogramei, ale graficului de apeluri i ale numarului de blocuri de baza. "-I dirs" "--directory-path=dirs" Opiunea -I specifica o lista de directoare de cautare in care se cauta fiierele sursa. Variabila de mediu GPROF_PATH poate fi, de asemenea, utilizata pentru a transmite aceste informaii. Se utilizeaza mai ales pentru ieirea de surse adnotate. "-J[symspec]" "--no-annotated-source[=symspec]" Opiunea -J face ca <> sa nu afieze codul sursa adnotat. Daca se specifica argumentul specificare-simbol, <> afieaza codul sursa adnotat, dar exclude simbolurile corespunzatoare. "-L" "--print-path" In mod normal, numele fiierelor sursa sunt afiate cu componenta de ruta suprimata. Opiunea -L face ca <> sa afieze numele de ruta complet al numelor de fiiere sursa, care este determinat din informaiile simbolice de depanare din fiierul imagine i este relativ la directorul in care a fost invocat compilatorul. "-p[symspec]" "--flat-profile[=symspec]" Opiunea -p face ca <> sa afieze un profil plan. Daca este specificatargumentul specificare-simbol, imprima profilul plan numai pentru simbolurile corespunzatoare. "-P[symspec]" "--no-flat-profile[=symspec]" Opiunea -P face ca <> sa suprime imprimarea unui profil plan. Daca se specifica argumentul specificare-simbol, <> afieaza un profil plan, dar exclude simbolurile corespunzatoare. "-q[symspec]" "--graph[=symspec]" Opiunea -q face ca <> sa afieze analiza grafica a apelurilor. Daca se specifica argumentul specificare-simbol, imprima graficul de apeluri numai pentru simbolurile corespunzatoare i pentru copiii acestora. "-Q[symspec]" "--no-graph[=symspec]" Opiunea -Q face ca <> sa suprime afiarea graficului de apeluri. Daca se specifica argumentul specificare-simbol, <> afieaza un grafic de apeluri, dar exclude simbolurile corespunzatoare. "-t" "--table-length=num" Opiunea -t face ca, atunci cand este activata adnotarea sursei, sa fie listate cele mai active linii de sursa numar din fiecare fiier sursa. Opiunea implicita este 10. "-y" "--separate-files" Aceasta opiune afecteaza doar ieirea sursei adnotate. In mod normal, <> imprima fiierele sursa adnotate la ieirea standard. Daca se specifica aceasta opiune, sursa adnotata pentru un fiier numit ruta/catre/nume_fiier este generata in fiierul nume_fiier-ann. In cazul in care sistemul de fiiere subiacent ar trunchia nume_fiier-ann astfel incat sa suprascrie originalul nume_fiier, <> genereaza sursa adnotata in fiierul nume_fiier.ann in locul acestuia (daca numele original al fiierului are o extensie, aceasta extensie este inlocuita cu .ann). "-Z[symspec]" "--no-exec-counts[=symspec]" Opiunea -Z face ca <> sa nu afieze o lista a funciilor i numarul de apeluri pentru fiecare dintre ele. Daca este specificat argumentul specificare-simbol, imprima numaratoarea, dar exclude simbolurile corespunzatoare. "-r" "--function-ordering" Opiunea --function-ordering face ca <> sa afieze o sugestie de ordonare a funciilor pentru program pe baza datelor de profilare. Aceasta opiune sugereaza o ordonare care poate imbunatai comportamentul de paginare, tlb i cache pentru program pe sistemele care accepta ordonarea arbitrara a funciilor intr-un executabil. Detaliile exacte ale modului in care se foreaza editorul de legaturi sa plaseze funciile intr-o anumita ordine depind de sistem i nu fac obiectul acestui manual. "-R map_file" "--file-ordering map_file" Opiunea --file-ordering face ca <> sa afieze o sugestie de ordonare a liniilor de legatura .o pentru program pe baza datelor de profilare. Aceasta opiune sugereaza o ordonare care poate imbunatai comportamentul de paginare, tlb i cache pentru program pe sistemele care nu accepta ordonarea arbitrara a funciilor intr-un executabil. Utilizarea argumentului -a este foarte recomandata cu aceasta opiune. Argumentul fiier-corespondene este un nume de ruta catre un fiier care furnizeaza corespondene intre numele funciei i fiierul obiect. Formatul fiierului este similar cu cel al ieirii programului <>. 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 fiier-corespondene cu GNU <>, tastai o comanda precum <>. "-T" "--traditional" Opiunea -T face ca <eze ieirea in stilul BSD ,,tradiional". "-w width" "--width=width" Stabilete laimea liniilor de ieire la laime. In prezent, se utilizeaza numai la imprimarea indexului funciei in partea de jos a graficului de apeluri. "-x" "--all-lines" Aceasta opiune afecteaza doar ieirea sursei adnotate. In mod implicit, sunt adnotate numai liniile de la inceputul unui bloc de baza. Daca se specifica aceasta opiune, fiecare linie dintr-un bloc de baza este adnotata prin repetarea adnotarii pentru prima linie. Acest comportament este similar cu <>. "--demangle[=style]" "--no-demangle" Aceste opiuni controleaza daca numele simbolurilor C++ trebuie sa fie separate la imprimarea rezultatelor. Opiunea implicita este sa se decodifice simbolurile. Opiunea ,,--no-demangle" poate fi utilizata pentru a dezactiva decodificarea. Compilatoare diferite au stiluri diferite de codificare. Argumentul opional ,,stil decodificare" poate fi utilizat pentru a alege un stil de decodificare adecvat pentru compilatorul dumneavoastra. Opiuni de analiza "-a" "--no-static" Opiunea -a face ca <> sa suprime afiarea funciilor declarate static (private); (acestea sunt funcii ale caror nume nu sunt listate ca fiind globale i care nu sunt vizibile in afara fiierului/funciei/blocului in care au fost definite). Timpul petrecut in aceste funcii, apelurile catre/de la acestea etc., vor fi toate atribuite funciei care a fost incarcata direct inaintea ei in fiierul executabil. Aceasta opiune afecteaza atat profilul plan, cat i graficul de apeluri. "-c" "--static-call-graph" Opiunea -c face ca graficul de apeluri al programului sa fie marit cu o euristica care examineaza spaiul de text al fiierului obiect i identifica apelurile de funcii in codul binar al mainii. Deoarece inregistrarile normale ale graficului de apeluri sunt generate numai atunci cand sunt introduse funcii, aceasta opiune identifica copii care ar fi putut fi apelai, dar nu au fost niciodata. Apelurile catre funcii care nu au fost compilate cu profilarea activata sunt, de asemenea, identificate, dar numai daca sunt prezente intrari in tabela de simboluri pentru acestea. Apelurile catre rutinele bibliotecii dinamice nu sunt de obicei gasite de aceasta opiune. Parinii sau copiii identificai prin intermediul acestei euristici sunt indicai in graficul de apeluri cu un numar de apeluri de 0. "-D" "--ignore-non-functions" Opiunea -D face ca <> sa ignore simbolurile despre care nu se tie ca sunt funcii. Aceasta opiune va oferi date de profil mai precise pe sistemele in care este suportata (Solaris i HPUX, de exemplu). "-k from/to" Opiunea -k va permite sa tergei din graficul de apelare toate arcurile de la simbolurile care corespund de_la specificare-simbol la cele care corespund pana_la specificare-simbol. "-l" "--line" Opiunea -l activeaza profilarea linie cu linie, ceea ce face ca rezultatele histogramei sa fie incarcate pe linii individuale de cod sursa, in loc de funcii. Aceasta caracteristica funcioneaza numai cu programe compilate de versiuni mai vechi ale compilatorului <>. Versiunile mai noi de <> sunt concepute pentru a funciona in schimb cu instrumentul <>. Daca programul a fost compilat cu contorizarea blocurilor de baza activata, aceasta opiune va identifica, de asemenea, de cate ori a fost executata fiecare linie de cod. In timp ce profilarea linie cu linie poate ajuta la izolarea locului intr-o funcie mare in care un program ii petrece timpul, aceasta crete semnificativ timpul de execuie al <> i amplifica inexactitaile statistice. "--inline-file-names" Aceasta opiune face ca <> sa afieze fiierul sursa dupa fiecare simbol, atat in profilul plan, cat i in graficul de apeluri. Ruta completa a fiierului este imprimata daca este utilizata impreuna cu opiunea -L. "-m num" "--min-count=num" Aceasta opiune afecteaza doar numarul de execuii. Simbolurile care sunt executate de mai puin de numar ori sunt suprimate. "-nsymspec" "--time=symspec" Opiunea -n face ca <>, in analiza grafica a apelurilor, sa propage timpii numai pentru simbolurile care corespund cu specificare-simbol. "-Nsymspec" "--no-time=symspec" Opiunea -n face ca <>, in analiza grafica a apelurilor, sa nu propage timpii pentru simbolurile care corespund cu specificare-simbol. "-Sfilename" "--external-symbol-table=filename" Opiunea -S face ca <> sa citeasca un fiier extern de tabele de simboluri, cum ar fi /proc/kallsyms, in loc sa citeasca tabelul de simboluri din fiierul obiect dat (opiunea implicita este ,,a.out"). Acest lucru este util pentru profilarea modulelor de nucleu. "-z" "--display-unused-functions" Daca dai opiunea -z, <> va meniona toate funciile din profilul plan, chiar i pe cele care nu au fost apelate niciodata i care nu au avut timp petrecut in ele. Acest lucru este util impreuna cu opiunea -c pentru a descoperi ce rutine nu au fost niciodata apelate. Opiuni diverse "-d[num]" "--debug[=num]" Opiunea -d numar specifica opiunile de depanare. Daca argumentul numar nu este specificat, activeaza toate depanarile. "-h" "--help" Opiunea -h afieaza utilizarea liniei de comanda. "-Oname" "--file-format=name" Selecteaza formatul fiierelor de date de profil. Formatele recunoscute sunt auto (implicit), bsd, 4.4bsd, magic i prof (inca nu este acceptat). "-s" "--sum" Opiunea -s determina <> sa rezume informaiile din fiierele de date de profil pe care le-a citit i sa scrie un fiier de date de profil numit gmon.sum, care conine toate informaiile din fiierele de date de profil pe care <> le-a citit. Fiierul gmon.sum poate fi unul dintre fiierele de intrare specificate; acest lucru are ca efect fuzionarea datelor din celelalte fiiere de intrare in gmon.sum. Eventual, putei rula din nou <> fara -s pentru a analiza datele cumulative din fiierul gmon.sum. "-v" "--version" Opiunea -v face ca <> sa afieze numarul versiunii curente i apoi sa iasa. Opiuni invechite Aceste opiuni au fost inlocuite cu versiuni mai noi care utilizeaza argumentele ,,specificare-simbol". "-e function_name" Opiunea -e funcie ii indica lui <> sa nu afieze informaii despre funcia nume-funcie (i copiii sai...) in graficul de apeluri. Funcia va fi in continuare listata ca fiind un copil al oricarei funcii care o apeleaza, dar numarul sau de index va fi afiat ca [not printed]. Se pot da mai multe opiuni -e; cu fiecare opiune -e poate fi indicat doar un singur argument nume-funcie. "-E function_name" Opiunea ,,-E funcie" funcioneaza la fel ca opiunea ,,-e", dar timpul petrecut in funcie (i copiii care nu au fost apelai din alta parte) nu va fi utilizat pentru a calcula procentele de timp pentru graficul de apeluri. Se pot da mai multe opiuni -E; cu fiecare opiune -E poate fi indicat doar un singur argument nume-funciei. "-f function_name" Opiunea -f funcie face ca <> sa limiteze graficul de apeluri la funcia numele_funciei i la copiii acesteia (i la copiii acestora...). Se pot da mai multe opiuni -f; cu fiecare opiune -f poate fi indicat doar un singur argument nume-funcie. "-F function_name" Opiunea -F funcie funcioneaza la fel ca opiunea ,,-f", dar numai timpul petrecut in funcie i in 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 opiuni -F; cu fiecare opiune -F se poate indica doar un singur argument nume-funcie. Opiunea -F prevaleaza asupra opiunii -E. FIIERE "a.out" lista de nume i spaiul pentru text. "gmon.out" graficul i profilul dinamic al apelurilor. "gmon.sum" rezumatul graficului dinamic al apelurilor i al profilului. ERORI Fineea eantionarii este prezentata, dar ramane in cel mai bun caz statistica. Presupunem ca timpul pentru fiecare execuie a unei funcii poate fi exprimat prin timpul total al funciei imparit la numarul de apeluri ale funciei. Astfel, timpul propagat de-a lungul arcurilor graficului de apelare catre parinii funciei este direct proporional cu numarul de ori de cand este parcurs acel arc. Parinii care nu sunt ei inii profilai vor avea timpul copiilor lor profilai propagat catre ei, dar vor aparea ca fiind invocai spontan in listarea graficului de apeluri i nu vor avea timpul lor propagat mai departe. In mod similar, cei care capteaza semnale, chiar daca sunt profilai, vor parea a fi spontani (dei din motive mai obscure). Orice copil profilat al captatorilor de semnal ar trebui sa aiba timpii lor propagai in mod corespunzator, cu excepia cazului in care captatorul de semnal a fost invocat in timpul execuiei rutinei de profilare, caz in care totul este pierdut. Programul profilat trebuie sa apeleze ,,exit"(2) sau sa se intoarca normal pentru ca informaiile de profilare sa fie salvate in fiierul gmon.out. CONSULTAI I 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 Drepturi de autor (C) 1988-2026 Free Software Foundation, Inc. Se acorda permisiunea de a copia, distribui i/sau modifica acest document in conformitate cu termenii Licenei GNU Free Documentation, versiunea 1.3 sau orice versiune ulterioara publicata de Free Software Foundation; fara seciuni invariante, fara texte de coperta i fara texte de contra coperta. O copie a licenei este inclusa in seciunea intitulata ,,GNU Free Documentation License". TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . binutils-2.46 9 februarie 2026 GPROF(1)