2014-07-21 6 views
6

द्वारा उत्पन्न कोड को जांचना क्या सी ++ कंपाइलर (जैसे सभी डिफ़ॉल्ट कन्स्ट्रक्टर/विनाशक) द्वारा स्पष्ट रूप से उत्पन्न कोड को जांचने के लिए कोई तरीका है (g ++ विकल्प?)?सी ++ कंपाइलर

उत्पन्न सी ++ कोड आदर्श होने के बाद, लेकिन कम से कम असेंबली अच्छी होगी। उपयोग:

g++ -S -g -O0 <file.cpp> 

मुझे जेनरेट कन्स्ट्रक्टर/विनाशकों के साथ कोई लेबल नहीं देता है।

+1

उन ctors/dtors द्वारा किए जाने वाले कार्यों के आधार पर, उन्हें रेखांकित होने की संभावना है। –

+0

इसके अलावा, http://gcc.godbolt.org/ इसके लिए बहुत उपयोगी है। उदाहरण के लिए, http://goo.gl/vB41Mi। –

+0

यह लगभग निश्चित रूप से सी ++ कोड उत्पन्न नहीं करता है, केवल असेंबली, कहीं। इसे उस फ़ाइल पर आज़माएं जो * कक्षा * का उपयोग करता है। – EJP

उत्तर

6

मुझे लगता है कि -fdump-tree-original विकल्प जितना करीब हो सके उतना करीब है। दुर्भाग्यवश यह आपके स्वयं के कोड और स्वचालित रूप से जेनरेट कोड दोनों दिखाएगा, लेकिन यह लेबल नहीं करेगा जो कि है। हालांकि यह जीसीसी के डंप का सबसे पठनीय है और यह किसी भी अनुकूलन के पहले जेनरेट कोड दिखाता है।

एक और विकल्प -fdump-translation-unit का उपयोग करना होगा। यह वृक्ष के कच्चे डंप को सचमुच सब कुछ के साथ बनाता है। बनाए गए नोड्स को "कृत्रिम" के रूप में चिह्नित किया जाएगा। हालांकि, मनुष्यों के पढ़ने के लिए प्रारूप आसान नहीं है और इसमें बहुत सी छोटी फ़ाइल फ़ाइल के लिए भी बहुत कुछ है। इससे कोई उपयोगी जानकारी प्राप्त करने के लिए आपको शायद इसे पढ़ने के लिए एक प्रोग्राम लिखना होगा और फिर उस नोड को ढूंढने के लिए पेड़ पर चलना होगा जिसमें आप रुचि रखते हैं और उन्हें एक और अधिक पठनीय प्रारूप प्रिंट करें।

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