ग्रहण डिबगर में स्टेप इन्टो और स्टेप ओवर के बीच क्या अंतर है?


194

मैं जावा प्रोग्राम के पूरे प्रवाह को डिबग करना चाहता हूं। ग्रहण F5में (चरण में) और F6(कदम खत्म) में क्या अंतर है ?


एफडब्ल्यूआईडब्ल्यू एक्सकोड / स्विफ्ट
हनी

जवाबों:


270

निम्न निर्देश पर अपने वर्तमान निर्देश सूचक (लाइन को अगले निष्पादित किया जाएगा, जिसके साथ संकेत दिया गया है ->) पर f(x)लाइन में लाइन g()द्वारा बुलाया गया है, g(2)पर विचार करें main():

public class testprog {
    static void f (int x) {
        System.out.println ("num is " + (x+0)); // <- STEP INTO
    }

    static void g (int x) {
->      f(x); //
        f(1); // <----------------------------------- STEP OVER
    }

    public static void main (String args[]) {
        g(2);
        g(3); // <----------------------------------- STEP OUT OF
    }
}

यदि आप उस बिंदु पर कदम रखना चाहते हैं, तो आप फ़ंक्शन कॉल में कदम रखते println()हुए f(), लाइन में चले जाएंगे ।

आप कदम करना हो तो खत्म हो गया उस बिंदु पर, आप में चले जाएँगे f(1)में लाइन g(), समारोह कॉल पर कदम।

डीबगर्स की एक अन्य उपयोगी विशेषता चरण से बाहर या चरण वापसी है। उस स्थिति में, एक चरण वापसी मूल रूप से आपको वर्तमान फ़ंक्शन के माध्यम से चलाएगी जब तक कि आप एक स्तर ऊपर नहीं जाते। दूसरे शब्दों में, यह के माध्यम से कदम होगा f(x)और f(1), फिर बुला कार्य करने के लिए पीछे हटने पर समाप्त करने के लिए g(3)में main()

ग्रहण (कम से कम यूरोपा, जो कि फिलहाल मेरे पास एक ही काम है) के F5लिए step into, के F6लिए step overऔर इसके F7लिए उपयोग करता है step return


1
"तो बुला समारोह में खत्म करने के लिए करने के लिए पीछे हटने g(3); में main()" <- आप मानते हैं कि आप अपने को मिला वर्तमान स्थान से g(2)और एक बार आपने पूर्ण कर आप लौट अपनी अगली पंक्ति में g(3)?
हनी

1
@ हाँ, हाँ, वहाँ कुछ अस्पष्टता थी (चाहे g(2)या g(3)कॉल वर्तमान में सक्रिय है) इसलिए मैंने साफ़ कर दिया है कि पहले पैराग्राफ में। सर उठाने के लिए धन्यवाद।
paxdiablo

144

जब कोड की डीबगिंग लाइनें होती हैं, तो यहां सामान्य परिदृश्य होते हैं:

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

ग्रहण में अन्य उन्नत डिबगिंग विशेषताएं हैं, लेकिन ये मूल बुनियादी बातें हैं।

यह सभी देखें



5

आप स्टेप ओवर का उपयोग करके विधि के विवरण के माध्यम से नहीं जा सकते। यदि आप वर्तमान लाइन को छोड़ना चाहते हैं, तो आप स्टेप ओवर का उपयोग कर सकते हैं, तो आपको केवल F6अगली पंक्ति में जाने के लिए केवल एक बार दबाने की आवश्यकता है । और अगर आपको लगता है कि विधि के भीतर कुछ गलत है, F5तो विवरणों की जांच करने के लिए उपयोग करें।


तो अगर मैं कदम बढ़ाता हूं और यदि फ़ंक्शन में कुछ प्रिंट स्टेटमेंट शामिल हैं, तो प्रिंटिंग होगी या नहीं?
username_4567

2

चरण में निष्पादित की जाने वाली वर्तमान में चयनित लाइन पर अगली अभिव्यक्ति को लागू किया जाता है, और निष्पादित विधि में अगली निष्पादन योग्य रेखा पर निलंबन निलंबित हो जाता है।

स्टेप ओवर वर्तमान में चयनित लाइन निष्पादित की जाती है और अगली निष्पादन योग्य लाइन पर निलंबित हो जाती है।

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