arrow_backফিল্ড নোটে ফিরুন
OFFENSIVE প্রকাশিত 5 Aug 2026

ডিবাগিং: নিজে খুঁজে বের করা

কাউকে জিজ্ঞাসা না করে ডিবাগিং এর একটি ব্যবহারিক গাইড — কীভাবে বাগ আলাদা করতে, যাচাই করতে এবং সত্যিকার অর্থে বুঝতে হয়।

বেশিরভাগ শিক্ষানবিস বাগকে দেয়ালের মতো দেখেন। তারা এটিতে আঘাত করেন, থেমে যান, এবং কাউকে তাদের পক্ষে এটি অতিক্রম করতে বলেন। যে অভ্যাসটি সত্যিকারের দক্ষতা তৈরি করে তা আলাদা: আপনি শিখেন বাগকে একটি প্রশ্ন হিসাবে দেখতে যার একটি খুঁজে পাওয়া যায় এমন উত্তর আছে, এবং আপনি জিজ্ঞাসা করার আগেই এটি খুঁজে পান।

এরর মেসেজকে শব্দের মতো নয়, প্রমাণের মতো পড়ুন

স্ট্যাক ট্রেস সবসময় এড়িয়ে যাওয়া হয় কারণ এগুলি ভয়ঙ্কর দেখায়। কিন্তু এগুলি সাধারণত আপনাকে ঠিক বলে দেয় কোথায় এবং কেন কিছু ভেঙে গেছে। যদি আপনি Python-এ TypeError: 'NoneType' object is not subscriptable পান, তা এলোমেলো গবাক্ষ্য নয় — এর মানে একটি ভেরিয়েবল যা আপনি একটি লিস্ট বা ডিক্ট ধারণ করার আশা করেছিলেন সত্যিই None। লাইন নম্বর আপনাকে বলে কোথায়। আপনার কাজ হল সেই লাইন থেকে পিছিয়ে যাওয়া এবং খুঁজে বের করা যেখানে মানটি সেট করা উচিত ছিল কিন্তু ছিল না।

যে কোনো কিছু অনলাইনে খোঁজার আগে এটি করুন: ট্রেসব্যাকের শেষ লাইন প্রথমে পড়ুন, তারপর উপরের দিকে কাজ করুন। শেষ লাইন সাধারণত প্রকৃত ব্যতিক্রম নাম দেয়। এর উপরের লাইনগুলি কল চেইন দেখায় যা আপনাকে সেখানে নিয়ে গেছে।

এটি উদ্দেশ্যমূলকভাবে পুনরুৎপন্ন করুন

যদি একটি বাগ শুধুমাত্র কখনও কখনও দেখা যায়, আপনি এটি বুঝেননি। কোড স্পর্শ করার আগে, এটি নির্ভরযোগ্যভাবে ঘটানোর চেষ্টা করুন। এক সময়ে একটি ইনপুট পরিবর্তন করুন। এটি কি একটি খালি তালিকার সাথে ব্যর্থ হয় কিন্তু পূর্ণ একটির সাথে নয়? এটি কি শুধুমাত্র দ্বিতীয় কলে একটি ফাংশনে ব্যর্থ হয়, প্রথমটিতে নয়? একটি বাগ যা আপনি কমান্ডের মাধ্যমে পুনরুৎপন্ন করতে পারেন তা 80% সমাধান করা একটি বাগ, কারণ এখন আপনি পরীক্ষা করতে পারেন একটি ফিক্স সত্যিই কাজ করেছে কিনা অনুমান করার পরিবর্তে।

সমস্যাটি অর্ধেক করুন, তারপর আবার অর্ধেক করুন

বাইনারি সার্চ শুধুমাত্র সর্টেড অ্যারের জন্য নয় — এটি একটি দীর্ঘ ফাংশন বা পাইপলাইনে ভেঙে যাওয়া কোড খুঁজে পাওয়ার দ্রুততম উপায়। আপনার লজিকের দ্বিতীয় অর্ধটি কমেন্ট করুন বা বাইপাস করুন এবং চেক করুন প্রথম অর্ধটি এখনও বাগ তৈরি করে কিনা। যদি হ্যাঁ, সমস্যা প্রথম অর্ধে আছে। যদি না, এটি দ্বিতীয়টিতে আছে। পুনরাবৃত্তি করুন। এটি একটি 200-লাইনের স্ক্রিপ্টের জন্য ঠিক কাজ করে যেমনটি এটি একটি মাল্টি-স্টেজ ডেটা পাইপলাইনের জন্য করে যেখানে আপনি প্রতিটি পর্যায়ে print() বা df.head() দিয়ে আউটপুট চেক করছেন।

এটি র‍্যান্ডমলি লাইন পরিবর্তন করা এবং পুনরায় চালানোর চেয়ে ভালো, যা বেশিরভাগ মানুষ চাপের অধীনে করে এবং এটি বাঁচানোর চেয়ে অনেক বেশি সময় নষ্ট করে।

print() কাজ করা বন্ধ করলে ডিবাগার ব্যবহার করুন print() এর পরিবর্তে

print() স্টেটমেন্ট সাধারণ ক্ষেত্রে ঠিক আছে, কিন্তু একবার আপনি একাধিক ফাংশন কলের জুড়ে অবস্থা তাড়া করছেন, একটি প্রকৃত ডিবাগার প্রকৃত সময় বাঁচায়। Python-এ, সন্দেহজনক লাইনের ঠিক আগে import pdb; pdb.set_trace() ড্রপ করুন, স্ক্রিপ্ট চালান, এবং আপনি একটি লাইভ প্রম্পট পান যেখানে আপনি ভেরিয়েবল পরিদর্শন করতে পারেন, n দিয়ে লাইন অনুসরণ করতে পারেন, এবং s দিয়ে ফাংশন কলগুলিতে প্রবেশ করতে পারেন। VS Code-এর বিল্ট-ইন ডিবাগার একই কাজ করে ব্রেকপয়েন্টগুলির সাথে যা আপনি টাইপ করার পরিবর্তে ক্লিক করেন। যেভাবেই হোক, লক্ষ্য একই: আপনার প্রোগ্রামের প্রকৃত অবস্থা দেখুন যা এটি সম্ভবত আছে অনুমান করার পরিবর্তে।

এটি আপনার বাকি প্রকল্প থেকে আলাদা করুন

যদি একটি বাগ একটি বৃহৎ কোডবেস-এর মধ্যে ঘটে, এটি বৃহৎ কোডবেস-এর মধ্যে ডিবাগ করবেন না। প্রাসঙ্গিক ফাংশনকে একটি তাজা ফাইলে কপি করুন নকল, ন্যূনতম ইনপুট দিয়ে যা একই ব্যর্থতা ট্রিগার করে। যদি বাগটি অদৃশ্য হয়, পারিপার্শ্বিক প্রসঙ্গ সম্পর্কে কিছু — একটি বৈশ্বিক ভেরিয়েবল, একটি আমদানি, স্তব্ধ অবস্থা — প্রকৃত কারণ, এবং আপনি এখন কিছু গুরুত্বপূর্ণ শিখেছেন। যদি বাগটি বিচ্ছিন্নে থাকে, আপনি এখন একটি ছোট, শেয়ারযোগ্য, পরীক্ষাযোগ্য ক্ষেত্র আছেন, এবং আপনি প্রকৃত ফিক্সের অনেক কাছাকাছি।

আপনার অনুমানগুলি স্মৃতির বিপরীতে বাস্তবতার বিপরীতে চেক করুন

ডিবাগিং সময়ের একটি বিশাল অংশ প্রশ্নহীন অনুমানে যায়:

AI সহায়তায় লেখা, পর্যালোচনা ও প্রকাশ করেছেন Michal Pilch (CISSP), Korra Studio।

আরও এগোতে প্রস্তুত?

এটি Korra Studio-র নলেজ বেস থেকে একটি নোট — প্ল্যাটফর্মটি প্রতিটি বিষয়কে ১-এর-সাথে-১ মেন্টরিংয়ের সাথে জুড়ে দেয়।

বিনামূল্যে শুরু করুনarrow_forward