मैं लिनक्स परफ का उपयोग कर एक सी ++ एप्लिकेशन प्रोफाइल कर रहा हूं, और मुझे GProf2dot का उपयोग करके एक अच्छा नियंत्रण प्रवाह ग्राफ मिल रहा है। हालांकि, सी लाइब्रेरी (libc6-2.13.so) से कुछ प्रतीकों कुल समय का एक बड़ा हिस्सा लेते हैं, और फिर भी इन-किनारों में नहीं हैं।मैं linux perf के साथ libc6 प्रतीकों (उदा। _int_malloc) के लिए कॉल अभिभावक कैसे प्राप्त करूं?
उदाहरण के लिए:
_int_malloc
समय के 8% लेता है, लेकिन कोई कॉल माता-पिता है।__strcmp_sse42
और__cxxabiv1::__si_class_type_info::__do_dyncast
एक साथ समय का लगभग 10% ले, और एक फोन करने वाले जिसका नाम0
है, जो कॉल करने2d6935c
,2cc748c
, और6
, जो कोई कॉल करने के लिए है है है।
नतीजतन, मुझे नहीं पता कि कौन सी दिनचर्या सिर्फ इस परफॉर्मिंग और गतिशील कास्टिंग के लिए जिम्मेदार है। हालांकि, ऐसा लगता है कि अन्य प्रतीकों (उदा। malloc
लेकिन _int_malloc
नहीं) माता-पिता को कॉल करें।
क्यों perf को माता-पिता को _int_malloc के लिए कॉल नहीं दिखाता है? मैं __do_dyn_cast के अंतिम कॉलर क्यों नहीं ढूंढ सकता? और, क्या मेरे सेटअप को संशोधित करने का कोई तरीका है ताकि मैं यह जानकारी प्राप्त कर सकूं? मैं x86-64 पर हूं, इसलिए मुझे आश्चर्य है कि मुझे फ्रेम पॉइंटर्स के साथ एक (गैर मानक) libc6 की आवश्यकता है।
एमसीएमसी के लिए +1, और एसओ में आपका स्वागत है। –