मैं this सीपीपीकॉन 2015 से बात करने के बाद कुछ कार्यक्रमों को प्रोफाइल करने के लिए एक शॉट देना चाहता था। मैंने उसी Google बेंचमार्क लाइब्रेरी को डाउनलोड किया जो लड़का इस बात का उपयोग करता है, मेरे प्रोग्राम को उचित स्विच के साथ संकलित करता है , इसे इसके साथ जोड़ा, फिर एक रन रिकॉर्ड करने के लिए perf इस्तेमाल किया। इस रिपोर्ट विकल्प मेरे देता है:पेर्फ मैंगल्ड फ़ंक्शन नाम दिखाता है
आप फ़ंक्शन नाम बहुत पढ़ने योग्य नहीं हैं देख सकते हैं। मुझे लगता है कि इसे सी ++ नाम मैंगलिंग के साथ करना है। दिलचस्प बात यह है कि वीडियो के सभी समारोह नाम उस व्यक्ति के लिए सही तरीके से दिखाए जाते हैं जिसने बात की, लेकिन मेरे लिए नहीं। मुझे नहीं लगता कि यह प्रतीक जानकारी पूरी तरह गायब होने का मामला है क्योंकि मुझे उस मामले में केवल स्मृति पते दिखाई देंगे। किसी कारण से, perf मेरे लिए C++ नाम मैंगलिंग को "पूर्ववत" नहीं कर सकता है, और यह देखने के लिए निराशाजनक है।
मैं उपयोग कर रहा हूँ जीसीसी (छ ++), संस्करण 5.2.1, पर्फ़ संस्करण 4.2.6 है, और मैं जब संकलन इन स्विच का उपयोग करें:
-I<my own include path> -L<path to the benchmark library> -O3 -std=c++14 -gdwarf-2 -fno-rtti -Wall -pedantic -lbenchmark -pthread
कारण है कि मैं -fno-omit-frame-pointer
का उपयोग नहीं करते यह है कि मैं इसके बजाय -gdwarf-2
विकल्प का उपयोग करता हूं, जो बौने निष्पादन योग्य में डीबगिंग जानकारी छोड़ देता है, जो इस मामले में फ्रेम पॉइंटर को छोड़ने का विकल्प है। इसका मतलब यह भी है कि मैं --call-graph "dwarf"
से perf record
पास करता हूं। वैसे भी, मैंने फ्रेम पॉइंटर विधि भी कोशिश की, और यह वही परिणाम देता है, इसलिए इससे कोई फर्क नहीं पड़ता।
तो इस मामले में सी ++ नाम उलझन में "पूर्ववत" क्यों नहीं किया जाता है? क्या इसका जीसीसी का उपयोग करने के साथ कुछ लेना देना है, जिसका मतलब है कि मैं libstdC++ का उपयोग कर रहा हूं?
मैं आर्क लिनक्स और 'परफ रिपोर्ट' का उपयोग कर रहा हूं सही प्रतीक demanging दिखाता है। Perf के लिए मैन पेज यह भी दिखाता है कि एक '- डीमंगल' विकल्प है जो डिफ़ॉल्ट रूप से सक्षम है। चूंकि मैं वही व्यवहार नहीं देख रहा हूं क्योंकि मेरे पास कोई जवाब नहीं है, लेकिन जो आप देख रहे हैं उसे डिफ़ॉल्ट व्यवहार की उम्मीद नहीं है। –
मैंने मैन्युअल रूप से उस स्विच को जोड़ने का प्रयास किया, लेकिन यह कुछ भी नहीं बदला – adam10603
@ गैब्रियलउथर्न क्या आप जीसीसी का भी उपयोग कर रहे हैं? – adam10603