2012-03-07 39 views
5

Tôi đã sử dụng trình thu thập gprof kết hợp với g++.Thời gian `gprof` dành cho các dòng mã cụ thể

Tôi có một chức năng trong mã của tôi bao gồm một số phần hành vi có liên quan đến chức năng chính mà sẽ không có ý nghĩa để tách chúng thành các chức năng riêng của chúng.

Tôi muốn biết lượng thời gian được sử dụng trong mỗi lĩnh vực mã này.

Vì vậy, nếu bạn tưởng tượng mã trông giống như

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

trong đó A, B, và C đại diện cho phần cụ thể của mã Tôi quan tâm đến, là có một cách để có được gprof cho tôi biết bao nhiêu thời gian dành cho những phần cụ thể đó?

+2

Nếu bạn đang cố gắng làm cho chương trình chạy nhanh hơn, * [bạn có thể làm tốt hơn gprof.] (Http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343) * –

Trả lời

2

Đây là tài nguyên hữu ích cho bạn: gprof line by line profiling.

Với phiên bản cũ hơn của trình biên dịch gcc, đối số được chỉ định theo dòng.

Tuy nhiên, các phiên bản gcc mới hơn sử dụng công cụ gcov thay vì gprof để hiển thị thông tin định dạng dòng theo dòng.

2

Nếu bạn đang sử dụng Linux, sau đó bạn có thể sử dụng linux Perf thay vì gprof, như mô tả ở đây:

http://code.google.com/p/jrfonseca/wiki/Gprof2Dot#linux_perf

perf report và chọn một chức năng sẽ cho phép bạn để có được line-by-line thông tin về thời gian CPU được sử dụng bên trong hàm.

6

Tôi biết đó là câu hỏi cũ nhưng tôi đã tìm thấy câu trả lời thú vị. Như Sam nói, tùy chọn -l chỉ dành cho trình biên dịch gcc cũ. Nhưng tôi đã thấy rằng nếu bạn biên dịch và liên kết với -pg -fprofile-arcs -ftest-coverage, hãy chạy chương trình, kết quả của gprof -l rất thú vị.

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) 

Thời gian nói trên mỗi dòng. Đó là kết quả rất thú vị. Tôi không biết tính chính xác hoặc tính hợp lệ của điều đó, nhưng nó khá thú vị. Hy vọng đó là trợ giúp

Các vấn đề liên quan