ইকলিপ ডিবাগারে স্টেপ ইন্টো এবং স্টেপ ওভারের মধ্যে পার্থক্য কী?


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

কোডের লাইনগুলি ডিবাগ করার সময়, এখানে স্বাভাবিক পরিস্থিতি রয়েছে:

  • ( পদক্ষেপে ) একটি পদ্ধতি প্রায় শুরু হতে চলেছে এবং আপনি সেই পদ্ধতির কোডটিতে ডিবাগ করতে চান, সুতরাং পরবর্তী পদক্ষেপটি সেই পদ্ধতিতে চলে যাওয়া এবং ধাপে ধাপে ডিবাগিং চালিয়ে যাওয়া।
  • ( স্টেপ ওভার ) একটি পদ্ধতি প্রায় ডাকা হতে চলেছে, তবে আপনি এই বিশেষ অনুরোধটি ডিবাগ করতে আগ্রহী নন, সুতরাং আপনি চান ডিবাগারটি পুরো একটি পদক্ষেপ হিসাবে সম্পূর্ণ পদ্ধতিটি কার্যকর করতে পারে exec
  • ( স্টেপ রিটার্ন ) আপনি এই পদ্ধতিটি ধাপে ধাপে ডিবাগিং সম্পন্ন করেছেন এবং আপনি কেবলমাত্র ডিবাগারটিকে পুরো পদ্ধতিটি চালনা করতে চান যতক্ষণ না এটি পুরো পদক্ষেপ হিসাবে ফিরে আসে।
  • ( পুনঃসূচনা ) আপনি ডিবাগারটি ধাপে ধাপে পরিবর্তে "সাধারণ" সম্পাদন পুনরায় শুরু করতে চান
  • ( লাইন ব্রেকপয়েন্ট ) এটি কীভাবে সেখানে পৌঁছেছে সে বিষয়ে আপনার কোনও খেয়াল নেই, তবে যদি এক্সিকিউশন কোনও নির্দিষ্ট কোডের নির্দিষ্ট লাইনে পৌঁছে যায় তবে আপনি চান যে ডিবাগারটি সাময়িকভাবে সেখানে কার্যনির্বাহীকরণ থামিয়ে দেবেন যাতে আপনি কী করতে হবে তা সিদ্ধান্ত নিতে পারেন।

গ্রহনের অন্যান্য উন্নত ডিবাগিং বৈশিষ্ট্য রয়েছে তবে এগুলি হল প্রাথমিক মৌলিক বিষয়গুলি।

আরো দেখুন



5

আপনি স্টেপ ওভারটি ব্যবহার করে পদ্ধতির বিশদটি অতিক্রম করতে পারবেন না। আপনি যদি বর্তমান লাইনটি এড়াতে চান, আপনি ধাপে ওভারটি ব্যবহার করতে পারেন, তারপরে আপনাকে F6পরবর্তী লাইনে যাওয়ার জন্য কেবল একবারের জন্য চাপতে হবে। এবং যদি আপনি মনে করেন যে পদ্ধতিটির মধ্যে কিছু ভুল F5হয়েছে তবে বিশদটি পরীক্ষা করে দেখুন।


সুতরাং আমি যদি পদক্ষেপ নিতে পারি এবং যদি ফাংশনটিতে কিছু মুদ্রণ বিবৃতি থাকে তবে মুদ্রণটি ঘটবে কি না?
ব্যবহারকারীর

2

পদক্ষেপ প্রবেশ করানোর জন্য বর্তমানে নির্বাচিত লাইনটির পরবর্তী অভিব্যক্তিটি আহ্বান করা হয় এবং অনুরোধ করা পদ্ধতিতে পরবর্তী এক্সিকিউটেবল লাইনে এক্সিকিউশন স্থগিত করা হয়।

পদক্ষেপের ওপরে বর্তমানে নির্বাচিত লাইনটি কার্যকর করা হয় এবং পরবর্তী এক্সিকিউটেবল লাইনে স্থগিত করা হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.