2012-03-07 9 views
5

की विशेष पंक्तियों में बिताया गया समय मैं g++ के साथ gprof प्रोफाइलर का उपयोग कर रहा हूं।'gprof` समय कोड

मेरे पास मेरे कोड में एक फ़ंक्शन है जो व्यवहार के कई वर्गों को समाहित करता है जो प्राथमिक कार्य के लिए पर्याप्त हैं जो उन्हें अपने कार्यों में विभाजित करने के लिए समझ में नहीं आता है।

मैं जानना चाहता हूं कि कोड के इन क्षेत्रों में से प्रत्येक में कितना समय व्यतीत होता है।

तो, जैसा कि आप कल्पना करता है, तो कोड लगता है कि

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

जहां ए, बी, और सी कोड मैं में दिलचस्पी रखता हूँ की विशेष वर्गों का प्रतिनिधित्व, वहाँ एक रास्ता gprof पाने के लिए मुझे बताओ कि कितना करने के लिए है उन विशेष वर्गों पर काम करने में समय बिताया जाता है?

+2

यदि आप प्रोग्राम को तेजी से चलाने की कोशिश कर रहे हैं, * [आप gprof से बेहतर कर सकते हैं।] (Http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343) * –

उत्तर

2

यहां आपके लिए एक उपयोगी संसाधन है: gprof line by line profiling

जीसीसी कंपाइलर के पुराने संस्करणों के साथ, gprof -l लाइन प्रोफाइलिंग द्वारा निर्दिष्ट पंक्ति निर्दिष्ट तर्क।

हालांकि, जीसीसी के नए संस्करण gprof के बजाय gcov उपकरण का उपयोग लाइन प्रोफाइलिंग जानकारी द्वारा लाइन प्रदर्शित करने के लिए करते हैं।

2

आप लिनक्स का उपयोग कर रहे हैं, तो आप linux gprof के बजाय पर्फ़ को यहां बताए गए उपयोग कर सकते हैं:

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

perf report लिखने और एक समारोह में आप प्राप्त करने की अनुमति देगा का चयन पंक्ति-दर-पंक्ति जानकारी फ़ंक्शन के अंदर CPU समय बिताया जाता है।

6

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मुझे एक दिलचस्प जवाब मिला है। सैम कहते हैं, -l विकल्प केवल पुराने जीसीसी कंपाइलर के लिए है। लेकिन मुझे पता चला है कि यदि आप -pg -fprofile-arcs -ftest-coverage के साथ संकलित और लिंक करते हैं, तो प्रोग्राम चलाएं, gprof -l का परिणाम बहुत दिलचस्प है।

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) 

यह कहता है कि प्रति पंक्ति व्यतीत समय है। यह बहुत दिलचस्प परिणाम है। मुझे इसकी सटीकता या वैधता नहीं पता है, लेकिन यह काफी रोचक है। उम्मीद है कि यह मदद

संबंधित मुद्दे