Printing the contents of the program stack (C Language) -


संभव डुप्लिकेट:

हाय,

मैं जानना चाहूंगा कि वर्तमान प्रोग्राम स्टैक की सामग्री को कैसे मुद्रित करें (सी भाषा का उपयोग करके)।

उदाहरण के लिए कहें।

  call_some_function () {... ... print_stack_till_now (); कुछ वापसी; } Call_some_other_function () {... ... print_stack_till_now (); कुछ वापसी; } मुख्य () {print_stack_till_now (); call_some_function (); print_stack_till_now (); call_some_other_function (); print_stack_till_now (); वापसी 0; }   

पिछला उदाहरण में (एक उदाहरण बिल्कुल नहीं हो सकता है :)) जब मैं print_stack_till_now () फ़ंक्शन को कॉल करता हूं, तब तक मुझे उस बिंदु तक बनाए गए मौजूदा स्टैक को प्रिंट करने में सक्षम होना चाहिए नए फ़ंक्शन कॉल प्रविष्टियां, वापसी स्थान, उनकी आर्गुमेंट इत्यादि)

क्या सी भाषा में ऐसा समारोह संभव है (यहां तक ​​कि इनलाइन असेंबली भी) कृपया मुझे इस सिद्धांत (या मौजूदा कोड भी बेहतर होगा) को ऐसे फ़ंक्शन लिखने के लिए आवश्यक है।

जीडीबी में हम वर्तमान स्टैक को देखने के लिए बैक्रे्रेस का उपयोग कर सकते हैं, मैं कुछ इसी तरह की तलाश कर रहा हूं। मुझे यह क्यों चाहिए? ... बस सीखना चाहता था।

धन्यवाद।

सरल कारण के लिए ऐसा करने का कोई पोर्टेबल तरीका नहीं है कि सी स्वयं स्टैक डेटा संरचना की अवधारणा को परिभाषित नहीं करता है। यह कार्यान्वयन के लिए पूरी तरह से खुला है कि यह स्वत: भंडारण कैसे करता है और फ़ंक्शन कॉल्स से देता है।

यह कहा जा रहा है कि अधिकांश कार्यान्वयन किसी प्रकार के ढेर को बिना खोलने की व्यवस्था प्रदान करता है। उदाहरण के लिए जीसीसी / ग्लिबिक रनटाइम विशिष्ट फ़ंक्शन प्रदान करता है backtrace

अन्य प्लैटफ़ॉर्म्स के समान स्टैक अनलाइनर्स हैं। और निश्चित रूप से आप अपने खुद के बैटरट्रैसिंग तंत्र को वैश्विक, थ्रेड स्थानीय स्टोरेज सरणी के माध्यम से लागू कर सकते हैं (यह स्थिर हो सकता है और स्टैक आकार द्वारा कितने फ़ंक्शन कॉल्स समर्थित हैं, केवल पर्याप्त प्रविष्टियां प्रदान करनी चाहिए), जहां प्रत्येक फ़ंक्शन कॉलिंग मॉड्यूल को कॉल करता है (सी प्रीप्रोसेसर __ फ़ाइल __ का उपयोग करके), लाइन (सी प्रीप्रोसेसर __ लाइन __ ) और फ़ंक्शन (कुछ अतिरिक्त प्रीप्रोसेसर जादू) रखा जाता है। < / html>

Comments