खोज…


परिचय

किसी प्रोग्राम को डीबग करते समय स्टैक ट्रेस एक महान सहायता है। जब आपका प्रोग्राम एक अपवाद फेंकता है, और कभी-कभी जब प्रोग्राम असामान्य रूप से समाप्त हो जाता है, तो आपको एक स्टैक ट्रेस मिलेगा।

विंडोज फॉर्म में एक सरल NullReferenceException के लिए स्टैक ट्रेस

चलो एक छोटा सा कोड बनाते हैं जो एक अपवाद फेंकता है:

private void button1_Click(object sender, EventArgs e)
{
    string msg = null;
    msg.ToCharArray();
}

यदि हम इसे निष्पादित करते हैं, तो हमें निम्नलिखित अपवाद और स्टैक ट्रेस मिलते हैं:

System.NullReferenceException: "Object reference not set to an instance of an object."
   at WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) in F:\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 29
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)

स्टैक ट्रेस ऐसे ही चलता है, लेकिन यह हिस्सा हमारे उद्देश्यों के लिए पर्याप्त होगा।

स्टैक ट्रेस के शीर्ष पर हम लाइन देखते हैं:

F: \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs: पंक्ति 29 में WindowsFormsApplication1.Form1.button1_Click (ऑब्जेक्ट प्रेषक, EventArgs e) पर

यह सबसे महत्वपूर्ण हिस्सा है। यह हमें सटीक रेखा बताता है जहां अपवाद हुआ: Form1.cs में पंक्ति 29।
तो, यह वह जगह है जहाँ आप अपनी खोज शुरू करते हैं।

दूसरी पंक्ति है

System.Windows.Forms.Control.OnClick (EventArgs e) पर

यह वह विधि है जिसे button1_Click कहा जाता है। तो अब हम जानते हैं कि button1_Click , जहाँ त्रुटि हुई, System.Windows.Forms.Control.OnClick से कॉल किया गया था।

हम इस तरह जारी रख सकते हैं; तीसरी पंक्ति है

System.Windows.Forms.Button.OnClick (EventArgs e) पर

यह, बदले में, System.windows.Forms.Control.OnClick नामक कोड है।

स्टैक ट्रेस उन फ़ंक्शनों की सूची है जिन्हें तब तक कहा जाता था जब तक आपका कोड अपवाद नहीं था। और इसका अनुसरण करके, आप यह पता लगा सकते हैं कि आपके कोड ने कौन से निष्पादन पथ का अनुसरण किया जब तक कि यह मुसीबत में नहीं चला गया!

ध्यान दें कि स्टैक ट्रेस में .Net सिस्टम से कॉल शामिल हैं; आपको सामान्य रूप से सभी माइक्रोसॉफ़्ट System.Windows.Forms का अनुसरण करने की आवश्यकता नहीं है। विंडोज। यह पता लगाने के लिए कि गलत क्या हुआ, केवल अपने कोड से संबंधित कोड का उपयोग करता है।

तो, इसे "स्टैक ट्रेस" क्यों कहा जाता है?
क्योंकि, जब भी कोई प्रोग्राम किसी विधि को कॉल करता है, तो यह ट्रैक करता है कि वह कहां था। इसकी एक डेटा संरचना होती है, जिसे "स्टैक" कहा जाता है, जहां यह अपना अंतिम स्थान बनाता है।
यदि यह विधि निष्पादित कर रहा है, तो यह देखने के लिए स्टैक पर दिखता है कि यह विधि कहा जाने से पहले कहां था - और वहां से जारी है।

तो स्टैक एक नई विधि को कॉल करने से पहले कंप्यूटर को यह पता करने देता है कि वह कहाँ छोड़ा गया था।

लेकिन यह डिबगिंग सहायता के रूप में भी कार्य करता है। एक जासूस ने उन कदमों को ट्रेस किया जैसे कि एक अपराधी ने अपना अपराध किया था, एक प्रोग्रामर स्टैक का इस्तेमाल कर सकता है ताकि दुर्घटनाग्रस्त होने से पहले उसके द्वारा उठाए गए कदमों का पता लगाया जा सके।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow