ধরা যাক আমাদের এর মতো একটি ফাংশন রয়েছে:
public void myStart()
{
for (int i = 0; i<10; i++) myFunction(i);
}
private int myFunction(int a)
{
a = foo(a);
a = bar(a);
return a;
}
private int foo(int a)
{
//do something here
//something gnarly here
//etc
return aValue;
}
private int bar(int a)
{
// do something here
//return aValue;
}
এখন যে কারণেই হোক না কেন, আমাদের কোডটি কাজ করছে না। সম্ভবত এটি একটি ত্রুটি ফেলছে, সম্ভবত এটি ভুল মানটি ফিরিয়ে দিচ্ছে, সম্ভবত এটি অসীম লুপে আটকে গেছে।
যে কোনও প্রথম বর্ষের প্রোগ্রামার প্রথম জিনিসটি কনসোল / স্ট্যান্ড আউট প্রিন্ট করা হয় (ডিবাগার ব্যবহার শিখার আগে হ্যালো ওয়ার্ল্ড কীভাবে প্রিন্ট করতে হয় তা শিখেছি)।
উদাহরণস্বরূপ এই কোডটি ডিবাগ করার জন্য তারা নিম্নলিখিতগুলি করতে পারে:
private int myFunction(int a)
{
print("before foo: a=" + a);
a = foo(a);
print("before bar: a=" + a);
a = bar(a);
return a;
}
private int foo(int a)
{
//do something here
print ("foo step1: a=" + a);
//something gnarly here
print ("foo step2: a=" + a + " someOtherValue="+ someOtherValue + " array.length= " + someArray.length());
//etc
return aValue;
}
private int bar(int a)
{
// do something here
//return aValue;
}
এখন তারা কোডটি চালায়, তারা একটি বড় কনসোল প্রিন্ট আউট পেয়েছে, যা তারা যেখানে ভুল হয়ে যাচ্ছে তার সন্ধান করতে পারে।
অবশ্যই একটি বিকল্প, ব্রেকপয়েন্টগুলি সেট করা এবং প্রতিটি পয়েন্টে কোডের মধ্য দিয়ে পদক্ষেপ নেওয়া।
কনসোল মুদ্রণের একটি বড় সুবিধা হ'ল বিকাশকারী এক সাথে মানগুলির প্রবাহ দেখতে পাবে, পদক্ষেপের মাধ্যমে ক্লিক না করে ইত্যাদি etc.
তবে অসুবিধাটি হ'ল, আপনার কোডটি এই সমস্ত মুদ্রণ বিবৃতি দিয়ে ছাঁটাই করা হবে যা পরে অপসারণ করা দরকার।
(সম্ভবত কোনও ডিবাগারকে কোনও লগের জন্য নির্দিষ্ট মানগুলি মুদ্রণ করতে বলা সম্ভব?) ব্রেকপয়েন্টগুলি তখন কোডটি সংশোধন না করে সহজেই যুক্ত বা মুছতে পারে can)
আমি এখনও প্রাথমিক ডিবাগিং পদ্ধতি হিসাবে কনসোল প্রিন্টিং ব্যবহার করি, আমি ভাবছি যে এখানকার অন্য কোনও কিছুর তুলনায় এটি কতটা সাধারণ / কার্যকর।