2012-03-07 18 views
5

Używam profilera gprof w połączeniu z g++.Czas `gprof` spędzony w poszczególnych liniach kodu

Mam funkcję w moim kodzie, która zawiera kilka sekcji zachowania, które są wystarczająco powiązane z podstawową funkcją, że nie ma sensu rozdzielanie ich na ich własne funkcje.

Chciałbym wiedzieć, ile czasu spędzamy w każdym z tych obszarów kodu.

Tak więc, jeśli wyobrazić kod wygląda

function(){ 
    A 
    A 
    A 
    B 
    B 
    B 
    C 
    C 
    C 
} 

gdzie A, B, i C oznaczają poszczególne sekcje kodu, który mnie interesuje, czy istnieje sposób, aby uzyskać gprof mi powiedzieć, ile poświęcasz czas na pracę nad tymi konkretnymi sekcjami?

+2

Jeśli chcesz, aby program działał szybciej, * [możesz zrobić lepiej niż gprof.] (Http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343) * –

Odpowiedz

2

Oto przydatne zasoby dla Ciebie: gprof line by line profiling.

W starszych wersjach kompilatora gcc argument gprof -l określał profilowanie linii po linii.

Jednak nowsze wersje gcc używają narzędzia gcov zamiast gprof do wyświetlania informacji o profilowaniu linii po linii.

6

Wiem, że to stare pytanie, ale znalazłem interesującą odpowiedź. Jak Sam mówi, opcja -l jest tylko dla starego kompilatora gcc. Ale odkryłem, że jeśli kompilujesz i łączysz się z -pg -fprofile-arcs -ftest-coverage, uruchom program, wynik gprof -l jest bardzo interesujący.

Flat profile: 

Each sample counts as 0.01 seconds. 
    % cumulative self    self  total   
time seconds seconds calls Ts/call Ts/call name  
13.86  0.26  0.26        main (ComAnalyste.c:450 @ 804b315) 
10.87  0.46  0.20        main (ComAnalyste.c:386 @ 804b151) 
    7.07  0.59  0.13        main (ComAnalyste.c:437 @ 804b211) 
    6.25  0.70  0.12        main (ComAnalyste.c:436 @ 804b425) 
    4.89  0.79  0.09        main (ComAnalyste.c:283 @ 804a3f4) 
    4.89  0.88  0.09        main (ComAnalyste.c:436 @ 804b1e9) 
    4.08  0.96  0.08        main (ComAnalyste.c:388 @ 804ad95) 
    3.81  1.03  0.07        main (ComAnalyste.c:293 @ 804a510) 
    3.53  1.09  0.07        main (ComAnalyste.c:401 @ 804af04) 
    3.26  1.15  0.06        main (ComAnalyste.c:293 @ 804a4bf) 
    2.72  1.20  0.05        main (ComAnalyste.c:278 @ 804a48d) 
    2.72  1.25  0.05        main (ComAnalyste.c:389 @ 804adae) 
    2.72  1.30  0.05        main (ComAnalyste.c:406 @ 804aecb) 
    2.45  1.35  0.05        main (ComAnalyste.c:386 @ 804ad6d) 
    2.45  1.39  0.05        main (ComAnalyste.c:443 @ 804b248) 
    2.45  1.44  0.05        main (ComAnalyste.c:446 @ 804b2f4) 
    2.17  1.48  0.04        main (ComAnalyste.c:294 @ 804a4e4) 
    2.17  1.52  0.04        main (ComAnalyste.c:459 @ 804b43b) 
    1.63  1.55  0.03        main (ComAnalyste.c:442 @ 804b22d) 
    1.63  1.58  0.03        main (ComAnalyste.c:304 @ 804a56d) 
    1.09  1.60  0.02        main (ComAnalyste.c:278 @ 804a3b3) 
    1.09  1.62  0.02        main (ComAnalyste.c:285 @ 804a450) 
    1.09  1.64  0.02        main (ComAnalyste.c:286 @ 804a470) 
    1.09  1.66  0.02        main (ComAnalyste.c:302 @ 804acdf) 
    0.82  1.67  0.02        main (ComAnalyste.c:435 @ 804b1d2) 
    0.54  1.68  0.01        main (ComAnalyste.c:282 @ 804a3db) 
    0.54  1.69  0.01        main (ComAnalyste.c:302 @ 804a545) 
    0.54  1.70  0.01        main (ComAnalyste.c:307 @ 804a586) 
    0.54  1.71  0.01        main (ComAnalyste.c:367 @ 804ac1a) 
    0.54  1.72  0.01        main (ComAnalyste.c:395 @ 804ade6) 
    0.54  1.73  0.01        main (ComAnalyste.c:411 @ 804aff8) 
    0.54  1.74  0.01        main (ComAnalyste.c:425 @ 804b12a) 
    0.54  1.75  0.01        main (ComAnalyste.c:429 @ 804b19f) 
    0.54  1.76  0.01        main (ComAnalyste.c:444 @ 804b26f) 
    0.54  1.77  0.01        main (ComAnalyste.c:464 @ 804b4a1) 
    0.54  1.78  0.01        main (ComAnalyste.c:469 @ 804b570) 
    0.54  1.79  0.01        main (ComAnalyste.c:472 @ 804b5b9) 
    0.27  1.80  0.01        main (ComAnalyste.c:308 @ 804a5a3) 
    0.27  1.80  0.01        main (ComAnalyste.c:309 @ 804a5a9) 
    0.27  1.81  0.01        main (ComAnalyste.c:349 @ 804a974) 
    0.27  1.81  0.01        main (ComAnalyste.c:350 @ 804a99c) 
    0.27  1.82  0.01        main (ComAnalyste.c:402 @ 804af1d) 
    0.27  1.82  0.01        main (ComAnalyste.c:416 @ 804b073) 
    0.27  1.83  0.01        main (ComAnalyste.c:417 @ 804b0a1) 
    0.27  1.83  0.01        main (ComAnalyste.c:454 @ 804b3ec) 
    0.27  1.84  0.01        main (ComAnalyste.c:461 @ 804b44a) 
    0.27  1.84  0.01        main (ComAnalyste.c:462 @ 804b458) 

Mówi się, że czas spędzony na linii. To bardzo ciekawy wynik. Nie znam dokładności ani trafności tego, ale jest całkiem interesująca. Mam nadzieję, że to pomoże