Libc और libstdc ++ प्रतीकों के लिए linux 'perf record' काम कैसे करें?


12

मैं perf record -gएक प्रोग्राम को प्रोफाइल करने के लिए x86-64 लिनक्स पर उपयोग कर रहा हूं । Libc या libstdc ++ में कई प्रतीकों के 0माता-पिता के रूप में हैं: __GI___strcmp_ssse3(libc) और strcmp@plt(libstdc ++) उदाहरण के लिए। (मैं वास्तव में डिबगर में इन प्रतीकों पर टूट सकता हूं और बैकट्रेस प्राप्त कर सकता हूं।)

मुझे यह जानकर अच्छा लगेगा कि इन कार्यों के प्रमुख कॉलर क्या हैं, और उन्हें रिकॉर्ड क्यों नहीं किया गया है। यह इसलिए है क्योंकि libcdc और libstdc ++ में x86_64 पर फ्रेम पॉइंटर्स नहीं हैं? और, अधिक व्यावहारिक रूप से, क्या इसके आसपास कोई रास्ता है?

जवाबों:


5

यह एक पुराना सवाल है, लेकिन यह अब संभव है --call-graph dwarf। मैन पेज से:

 -g
       Enables call-graph (stack chain/backtrace) recording.

   --call-graph
       Setup and enable call-graph (stack chain/backtrace) recording, implies -g.

           Allows specifying "fp" (frame pointer) or "dwarf"
           (DWARF's CFI - Call Frame Information) as the method to collect
           the information used to show the call graphs.

           In some systems, where binaries are build with gcc
           --fomit-frame-pointer, using the "fp" method will produce bogus
           call graphs, using "dwarf", if available (perf tools linked to
           the libunwind library) should be used instead.

मेरा मानना ​​है कि इसके लिए हाल ही में लिनक्स कर्नेल (> = 3.9; मुझे पूरी तरह से यकीन नहीं है) की आवश्यकता है। आप जांच कर सकते हैं कि आपका डिस्ट्रो का परफेक्ट पैकेज libdw से जुड़ा हुआ है या लिबुनविंड के साथ readelf -d $(which perf) | grep -e libdw -e libunwind। Fedora 20 पर, perf को libdw के साथ जोड़ा गया है।


perf record --call-graph dwarfमेरे लिए इस समस्या का हल करता है। दुर्भाग्य से, ऐसा लगता है कि पूर्ण को बौने जानकारी का उपयोग करते समय कॉलर-आधारित (अर्थात "उलटा") कॉल-ग्राफ़ दिखाने में समस्याएँ होती हैं। यही कारण है कि मैंने विज़ुअलाइज़ेशन के लिए फ्लेमग्राफ का उपयोग करना शुरू कर दिया।
नीला

ध्यान दें कि बौना
अनइंडिंग

-2

perfएक कर्नेल टूल है जो सिस्टम कॉल के लिए बीता हुआ समय दिखाता है। आप GNU ग्रिट की तलाश कर रहे हैं। "gprof - डिस्प्ले कॉल ग्राफ प्रोफाइल डेटा"। ग्रिट का उपयोग करने के लिए आपको -pgस्विच के साथ अपने स्रोतों को संकलित करने की आवश्यकता है ।

इसके बगल में बहुत सारे अत्याधुनिक प्रोफाइलिंग उपकरण हैं eclipse-cdt-profiling-framework

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.