कैसे पता लगाएं कि संकलक किस कार्य को उत्पन्न करता है?


11

मैं संकलक-जनित कार्यों के बारे में जानता हूं, तीन का नियम और पांच का नियम। वास्तविक दुनिया के परिदृश्यों में, यह पता लगाना तुच्छ नहीं हो सकता है कि कंपाइलर-जनरेट किए गए फ़ंक्शंस (कंस्ट्रक्टर, असाइनमेंट ऑपरेटर्स, डिस्ट्रक्टर) वास्तव में कंपाइलर द्वारा बनाए गए थे।

क्या किसी विशिष्ट वर्ग के लिए संकलक-निर्मित कार्यों को सूचीबद्ध करने का कोई तरीका है?

मैं मुख्य रूप से विजुअल स्टूडियो 2019 और एक्सकोड में रुचि रखता हूं, लेकिन एक सामान्य समाधान और भी अधिक स्वागत योग्य होगा।

जवाबों:


11

नियम जटिल हैं। मैं एक अन्य उत्तर से चोरी करूंगा जो हावर्ड हिनेंट की प्रस्तुति की एक तालिका का उद्धरण करता है ।

यहां छवि विवरण दर्ज करें

यहाँ नैतिक यह है कि एक अच्छा अभ्यास है संकलक अंतर्निहित घोषणाओं पर भरोसा नहीं करना और स्पष्ट रूप से हर विशेष सदस्य की घोषणा करना (जैसा कि आपकी आवश्यकताओं के आधार पर डिफ़ॉल्ट या हटाया गया)


यदि आप स्पष्ट रूप से हर उस विशेष सदस्य को घोषित करते हैं जिसे आप खो देते हैं, तो "घोषित नहीं किया गया" चाल निर्माण और असाइनमेंट ऑपरेटर के लिए विशेष सदस्य का दर्जा।
मैक्सिम इगोरुस्किन

@MaximEgorushkin मेरी बात यह है कि यदि आपको उनकी आवश्यकता है, तो आपको उन्हें डिफ़ॉल्ट घोषित करना होगा (हालांकि डिफ़ॉल्ट का मतलब अभी भी घोषित नहीं किया जा सकता है) या हटा दिया गया है।
17

2
@bolov चार्ट उपयोगी है लेकिन यह मेरे प्रश्न का उत्तर नहीं देता है। मैं यह पता लगाना चाहता हूं कि संकलक द्वारा वास्तव में कौन से कार्य उत्पन्न किए गए थे। दूसरे शब्दों में: मैं यह नहीं पूछ रहा कि सिद्धांत में क्या होना चाहिए, लेकिन व्यवहार में क्या हो रहा है।
हेलिज क्लेन

1
@ tjwrona1992: उस तर्क से, हमें कभी भी अपने कोड का परीक्षण करने की आवश्यकता नहीं होगी, क्योंकि हमें पता होगा कि यदि संकलक ने हमारे द्वारा किए गए उद्देश्य से अलग कुछ किया है, तो इसमें एक बग होना चाहिए।
बरखा

1
@ tjwrona1992: हां, बिल्कुल। इसी तरह, आपके कंपाइलर ने जो कुछ भी देखा है उसे देखने का मतलब यह नहीं है कि कंपाइलर सही है, बल्कि यह सत्यापित करने के लिए कि आपने कंपाइलर को सही इनपुट प्रदान किया है।
23

7

"क्या किसी विशिष्ट वर्ग के लिए संकलक-जनित कार्यों को सूचीबद्ध करने का कोई तरीका है?"

जरूर है। पर लिनक्स (और अन्य यूनिक्स प्रणालियों) आप उपयोग कर सकते हैं nm, readelfऔर objdumpपर उत्पन्न वस्तु फ़ाइलें / पुस्तकालयों / उन्हें एकत्रित न और किसी भी निर्यात प्रतीकों (और भी बहुत कुछ) का निरीक्षण करने के लिए निष्पादन योग्य।

विंडोज पर समान उपकरण हैं , मुझे पता है, लेकिन यह एक ऐसा प्लेटफॉर्म नहीं है जिसके साथ मैं बहुत काम करता हूं, इसलिए दुर्भाग्य से मैं वहां सटीक टूल नाम नहीं दे सकता।


1
हालाँकि ये उपकरण बहुत अच्छी तरह से आपको यह नहीं दिखा सकते हैं कि क्या कार्य उत्पन्न हो सकते हैं (यानी, संकलक को उन्हें उत्पन्न करने की अनुमति दी गई थी, लेकिन आपने कभी भी उन कार्यों का उपयोग नहीं किया, इसलिए इसे परेशान न करने का निर्णय लिया गया, या लिंक-टाइम कोड उन्मूलन से छुटकारा मिल गया)
JMAA

@ जेएमएए ज्यादातर मामलों में, "मानक के रूप में कभी भी उपयोग नहीं किया जाता है" उत्पन्न करने की अनुमति दी जाती है, जिसका अर्थ है कि एक फ़ंक्शन "अनुमानित रूप से घोषित किया गया था" लेकिन "अंतर्निहित रूप से परिभाषित नहीं" था। हां, इसका मतलब है कि आप प्रतीकों को नहीं देखेंगे, भले ही इनलाइनिंग अक्षम हो।
aschepler

1
कड़ाई से बोलते हुए, यह उत्तर पूछे गए प्रश्न के अधिक सटीक जवाब देता है: "संकलक ने कौन से तरीके उत्पन्न किए?" यह बहुत कम सटीक प्रश्न के समान नहीं है "संकलक द्वारा अलग संदर्भ में कौन सी विधियां उत्पन्न की गई हो सकती हैं?"
रिसी

@ सच्ची लेकिन अधिक सटीक सवाल आसानी से जवाबदेह नहीं है, इसलिए मैं उस बात के लिए गया जिसका जवाब दिया जा सकता है। यदि आपको लगता है कि मेरा जवाब मूल्यवान नहीं है तो बेझिझक नीचे उतरें।
जेस्पर जुहल

1
@jesper: नहीं, मैं पहले से ही अपडाउन कर रहा हूं। मुझे लगता है कि आपके द्वारा उत्तर दिया गया प्रश्न अधिक सटीक है, जैसा कि मैंने कहा। दूसरा प्रश्न, जो आशय हो सकता है, इसके लिए कुछ हस्त-मैथुन की आवश्यकता है क्योंकि यह विरोधाभासी है: हम नहीं जानते कि इसमें क्या काल्पनिक संदर्भ शामिल हो सकते हैं। लेकिन यह वस्तुतः पूछे जाने वाले प्रश्न हैं, जानबूझकर या नहीं, इसलिए इसका जवाब देने के लिए कुडोस।
रिसी

1

यह वर्तमान में केवल एक आंशिक उत्तर है।

विजुअल स्टूडियो 2019

कंस्ट्रक्टर्स

क्लास ऑब्जेक्ट को परिभाषित करते समय, विजुअल स्टूडियो का इंटेलीसेनस फ़ंक्शन उपलब्ध कंस्ट्रक्टरों को दिखाता है, दोनों कंपाइलर-जनरेट और आपका अपना:

यहां छवि विवरण दर्ज करें

यह जानकारी हमेशा नहीं आती है, दुर्भाग्य से। उपरोक्त स्क्रीनशॉट के लिए काम करने के लिए, मुझे कोष्ठक में कुछ लिखना था, इसलिए अल्पविराम।

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