लिनक्स पर C ++ के लिए प्रोफाइलर का उपयोग करना क्या आसान है? [बन्द है]


79

मुझे लिनक्स पर C ++ चलाने वाले कुछ कोड को प्रोफाइल करना होगा। क्या आप लोग कुछ प्रोफाइलरों की सिफारिश कर सकते हैं?


1
आपको लिनक्स और सी ++ टैग जोड़ना चाहिए। आपको शायद बेहतर प्रतिक्रिया और विचारों की श्रेणी मिल जाएगी।
बतख

2
स्टैकओवरफ्लो का एक डुप्लिकेट की तरह लग रहा है । http: //www.questions/375913/…
माइकल मायर्स

उदाहरण: लाइकविद, एलएलटीएनजी, ऑप्रोफाइल, वेलग्रिंड, वीट्यून, ग्रिट, परफ, गैपरफूल, पीपीटी
शान

तिरछा पर यह प्रश्न देखें: slant.co/improve/topics/1005
ideasman42

जवाबों:


37

ग्रिप का उपयोग करें।

बस -pgध्वज के साथ संकलित करें (मुझे लगता है कि (लेकिन मुझे यकीन नहीं है) आपको हालांकि अनुकूलन का रुख करना होगा।) और gmon.out फ़ाइल का विश्लेषण करने के लिए gprof का उपयोग करें जिसे आपका निष्पादन योग्य तब उत्पादन करेगा।

उदाहरण के लिए:

gcc -pg -o whatever whatever.c

./whatever

gprof whatever gmon.out

जी ++ और cpp के साथ एक ही बात।


32
अनफ़िल्टर्ड कोड को प्रोफाइल करना थोड़ा व्यर्थ है, है ना? इसी तरह, प्रोफाइलिंग कोड जिसे भारी रूप से संशोधित किया गया है -pg अक्सर गलत स्पॉट के अनुकूलन में आपको गुमराह करता है।
संघीय

1
-pg एक लिंकर विकल्प है, संकलक नहीं
स्लग प्यू

24

valgrind एक अच्छी तरह से जाना जाने वाला linux profiler है


सोचा था कि स्मृति रिसाव की जाँच के लिए वैलग्राइंड अधिक था .. मैं यह देखने की कोशिश कर रहा हूं कि कौन से कार्य आदि कहे जा रहे हैं
शेरगिल

14
"कॉलग्रिंड" नामक सुइट टूल का उपयोग करें
dfa

2
Valgrind बस गतिशील उपकरण बनाने के लिए एक रूपरेखा है। हालांकि, यह मेमचेक का पर्याय बन गया है, जो कि वेलग्रिंड पर बनाया गया एक उपकरण है। प्रोफाइलर पर कॉलग्रिंड एक बहुत अच्छा है।
फालिना


13

RotateRight ( http://www.rotateright.com ) से ज़ूम करें जो मैं उपयोग कर रहा हूं। इसमें फ़ंक्शन का तितली दृश्य है और आप किसी भी फ़ंक्शन को स्रोत या asm कोड में गोता लगाने के लिए डबल-क्लिक कर सकते हैं। अपने स्रोत को देखने के लिए डिबगिंग जानकारी (-g) के साथ बनाएँ, लेकिन आपको अभी भी अनुकूलित कोड का निर्माण और प्रोफाइल करना चाहिए ।


1
बस इस कार्यक्रम को एक शॉट दिया, यह वास्तव में काफी अच्छा है! वर्तमान में लिनक्स पर मेरा पसंदीदा प्रोफाइलर; हालाँकि यह ध्यान देने योग्य है कि इसे -fno-omit-frame-pointerप्रभावी रूप से प्रोफाइल के साथ कोड बनाने की आवश्यकता है ।
निक रीमन

1
लिंक मृत लगता है। क्या किसी को पता है कि (या अगर) यह कहीं और पाया जा सकता है?
साइमन एफ

12

मैं Oprofile का प्रशंसक हूं । इसमें कर्नेल मॉड्यूल स्थापित करना शामिल है और इसमें सीखने की अवस्था थोड़ी है, लेकिन यह काफी शक्तिशाली है और डिबगिंग प्रतीकों के बिना अनुकूलित कार्यक्रमों / कार्यक्रमों के लिए बहुत अच्छी तरह से काम करता है।

Vtune Intel द्वारा बनाया गया एक और बहुत शक्तिशाली प्रोफाइलर है। मेरा मानना ​​है कि नॉन-कमर्शियल सॉफ्टवेयर के लिए लिनक्स संस्करण मुफ्त है।

इसमें dfa द्वारा प्रस्तावित टूल का Valgrind सुइट भी है । Callgrind शायद वही होगा जिसमें आप सबसे अधिक रुचि रखते हैं। Cachegrind (जिसकी विशेषता Callgrind की एक सबसेट है) और मस्सिफ़ दिलचस्प होने के साथ-साथ दिलचस्प भी है, लेकिन मुझे बाद वाले का कोई अनुभव नहीं है।


ओप्रोफाइल के लिए +1, यह एक "आसान उपकरण" नहीं है
dfa

1
हाहा, सच। मुझे शायद उस आवाज़ को इतना आसान नहीं बनाना चाहिए :) यह निश्चित रूप से Vtune और Valgrind टूल के रूप में "इसके तहत रन प्रोग्राम" के रूप में सरल नहीं है, लेकिन मुझे लगता है कि आपको इसकी बहुत जल्दी आदत है।
फलैना जूल

oprofile दिलचस्प लगता है - क्या यह x86_64 का समर्थन करता है?
LiraNuna

दुर्भाग्य से किसी भी उपयोग के लिए वीट्यून मुफ़्त नहीं है।
22

5

पर एक नजर डालें KCacheGrind जो करने के लिए एक ग्राफिकल दृश्यपटल है valgrind और यह वास्तव में आसान यह उपयोग करने के लिए बनाता है।




2

Sysprof पर एक नज़र डालें । आप सबसे अधिक संभावना वितरण करते हैं यह पहले से ही उपलब्ध है।

ध्यान दें कि यदि आपके एप्लिकेशन को फ़्रेम पॉइंटर्स के साथ संकलित किया गया है, तो सभी उल्लेखित प्रोफाइलर सबसे अच्छा काम करते हैं। यही है, आपको gcc कमांड लाइन पर -fno-omit-फ़्रेम-पॉइंटर का उपयोग करना चाहिए।


1

आपके द्वारा एकत्र किए गए 1000 नमूनों के बजाय, आप मैन्युअल रूप से एकत्र किए गए 10 नमूनों पर अड़चन के बारे में अपने निर्णय को आधार बनाएंगे prof
दिमित्री ग्रिगोरीव

1
@DmitryGrigoryev: सही है, और यह वास्तव में आपको बताता है कि आपको क्या तय करना चाहिए। सांख्यिकीय स्पष्टीकरण यहाँ है । वास्तव में, लोगों से पहली गलती यह सोचने की है कि वे पूरी तरह से अच्छे और बेकार कोड के बजाय "अड़चन" की तलाश कर रहे हैं ;-)
माइक डनलवेई

अच्छा लगा, धन्यवाद। जब आप डिबगर में एक वास्तविक फ़ंक्शन कॉल देखते हैं तो मैं पूरी तरह से आपकी बात खरीद लेता हूं। और मैं समझता हूँ कि "अड़चन" का अर्थ "अच्छा अनुकूलन लक्ष्य" नहीं है, बस एक संभावित है। फिर भी, मुझे लगता है कि यह profकिसी भी तरह से शुरू करने के लिए समझ में आता है : अगर मुझे लगता है कि f()सांख्यिकीय रूप से सबसे समस्याग्रस्त कार्य है, तो मैं कार्यक्रम को कई बार रोकूंगा जब तक कि मैं f()सिर्फ एक यादृच्छिक फ़ंक्शन के साथ शुरू करने के बजाय लैंड नहीं करता हूं जो मैंने पहले बंद कर दिया था।
दिमित्री ग्रिगोरीव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.