2011-10-13 3 views
6

मेरा सी ++ प्रोग्राम बहुत सी CPU का उपभोग कर रहा है, और जितना अधिक चलता है उतना ही। मैं CPU उपयोग प्रोफ़ाइल करने के लिए गूगल प्रदर्शन उपकरण का उपयोग किया और मैं क्या मिल गया है: केवल यहाँ दिखाया गया है 5 प्रक्रियाओं में से 1 एक वास्तविक समारोह का नाम हैGoogle परफ टूल में पते की व्याख्या कैसे करें CPU प्रोफाइलर

(pprof) top 
Total: 1343 samples 
    1330 99.0% 99.0%  1330 99.0% 0x0000000801dcb11c 
     7 0.5% 99.6%  7 0.5% 0x0000000801dcb11e 
     4 0.3% 99.9%  4 0.3% program::threadWorker 
     1 0.1% 99.9%  1 0.1% 0x0000000801dcb110 
     1 0.1% 100.0%  1 0.1% 0x00007fffffffffc0 

हालांकि,; बाकी पते हैं। मैं यह कैसे पता लगा सकता हूं कि ये पते क्या हैं?

संपादित करें (बेशक, मैं सबसे पहले पता ऊपर दिखाए में दिलचस्पी है): यह कैसे मैं प्रोफाइलर भाग गया है:

env CPUPROFILE=prof.out ./a.out 
[kill program] 

pprof ./a.out prof.out 

इसके अलावा, मैं कोड निरीक्षण द्वारा मूल कारण मिल गया। लेकिन यह अभी भी अच्छा होगा कि प्रोफाइलर किसी पते के बजाय अपराधी कार्य को इंगित करे।

उत्तर

2

क्या यह संभव है कि आपने google-pprof में परिणाम लोड करते समय निष्पादन योग्य निर्दिष्ट नहीं किया हो?

मैं के रूप में चलाते:

$ google-pprof executable /tmp/executable.hprof --text | less 

और समारोह के नाम देख सकते हैं ठीक। या जब आप Google- pprof चलाते हैं तो ये विधियां आपके साझा पथ में कुछ साझा लाइब्रेरी में नहीं हैं?

+0

मैंने अपना प्रश्न संपादित करने के लिए संपादित किया कि मैं प्रोफाइलर कैसे चला गया। मुझे अपराधी कार्य मिला, जिसे एक ही फाइल में घोषित किया गया है, न कि साझा पुस्तकालय से। – jules

+0

@jules: क्या प्रोफाइलर आपको अपराधी कार्य खोजने में मदद करता है? –

+0

@ माइक डनलवेवी: नहीं, मुझे कोड निरीक्षण द्वारा मिला क्योंकि मेरा कार्यक्रम अपेक्षाकृत छोटा है। – jules

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