আমি যুক্ত করতে চাই যে একটি ডিবাগার সর্বদা নিখুঁত সমাধান নয় এবং সর্বদা ডিবাগিংয়ের সমাধানে যাওয়া উচিত নয়। এখানে কয়েকটি কেস রয়েছে যেখানে কোনও ডিবাগার আপনার পক্ষে কাজ না করতে পারে:
- আপনার প্রোগ্রামের অংশটি ব্যর্থ হয় যা সত্যিই বড় (দুর্বল মডুলারাইজেশন, সম্ভবত?) এবং আপনি ঠিক নিশ্চিত নন যে কোডের মাধ্যমে পদক্ষেপ নেওয়া শুরু করবেন। এগুলির মধ্যে দিয়ে পদক্ষেপ নেওয়া খুব সময় সাশ্রয়ী হতে পারে।
- আপনার প্রোগ্রামে প্রচুর কলব্যাক এবং অন্যান্য অ-রৈখিক প্রবাহ নিয়ন্ত্রণ পদ্ধতি ব্যবহার করা হয়, যা আপনি যখন পদক্ষেপ নেন তখন ডিবাগারকে বিভ্রান্ত করে তোলে।
- আপনার প্রোগ্রামটি বহু-থ্রেডযুক্ত। বা আরও খারাপ, আপনার সমস্যা রেসের শর্তের কারণে is
- এতে যে বাগটি রয়েছে সে কোডটি বাগ বের হওয়ার আগে বহুবার চলে। এটি প্রধান লুপগুলিতে বিশেষত সমস্যাযুক্ত বা আরও খারাপ হতে পারে, পদার্থবিজ্ঞানের ইঞ্জিনগুলিতে, যেখানে সমস্যাটি সংখ্যাসূচক হতে পারে। এমনকি ব্রেক ব্রেকপয়েন্টও নির্ধারণ করে, এক্ষেত্রে আপনি বাগটি প্রদর্শিত না হওয়ায় আপনি এটি বহুবার হিট করতে চান।
- আপনার প্রোগ্রামটি অবশ্যই রিয়েল-টাইমে চলবে। নেটওয়ার্কে সংযুক্ত প্রোগ্রামগুলির জন্য এটি একটি বড় সমস্যা। আপনি যদি নিজের নেটওয়ার্ক কোডে ব্রেকআপপয়েন্ট স্থাপন করেন, অন্য প্রান্তটি আপনার পাড়ি দেওয়ার অপেক্ষা রাখে না, এটি কেবল সময়ের বাইরে চলে। প্রোগ্রামগুলি যেগুলি ঘড়ির উপরে নির্ভর করে যেমন সিস্টেমের ঘড়ির উপর নির্ভর করে, যেমন ফ্রেমস্কিপযুক্ত গেমগুলি, সেগুলিও খুব ভাল নয়।
- আপনার প্রোগ্রামটি কিছু ক্ষতিকারক ক্রিয়াকলাপ সম্পাদন করে, যেমন ফাইলগুলিতে লিখন বা ইমেলগুলি প্রেরণ, এবং আপনি এটির মধ্য দিয়ে চলার জন্য কত সময় প্রয়োজন তা সীমাবদ্ধ করতে চান।
- আপনি বলতে পারবেন যে আপনার বাগটি ফাংশন এক্স এ এসে ভুল মানগুলির কারণে ঘটেছিল তবে আপনি জানেন না যে এই মানগুলি কোথা থেকে এসেছে। প্রোগ্রামটি চালিয়ে যাওয়া এবং বারবার, ব্রেকপয়েন্টগুলি আরও দূরে স্থাপন করা, একটি বিশাল ঝামেলা হতে পারে। বিশেষত যদি পুরো প্রোগ্রাম জুড়ে অনেক জায়গা থেকে ফাংশন এক্স কল করা হয়।
এই সমস্ত ক্ষেত্রে, হয় আপনার প্রোগ্রামটি হঠাৎ করে বন্ধ হয়ে যাওয়ার ফলে শেষের ফলাফলগুলি ভিন্ন হতে পারে, বা বাগের কারণে তৈরি হওয়া একটি লাইনের সন্ধানে ম্যানুয়ালি পদক্ষেপ নেওয়ার কারণে খুব ঝামেলা হয়। আপনার বাগটি ভুল আচরণ, বা ক্র্যাশ কিনা তা সমানভাবে ঘটতে পারে। উদাহরণস্বরূপ, যদি স্মৃতি দুর্নীতির কারণে ক্র্যাশ ঘটে, তখন ক্রাশটি ঘটে যায়, মেমরির দুর্নীতি প্রথম হয়েছিল সেখান থেকে খুব দূরে এবং কোনও কার্যকর তথ্য অবশিষ্ট নেই।
তাহলে, বিকল্পগুলি কী কী?
সহজতম লগইন এবং দৃser়তা হয়। আপনার প্রোগ্রামে বিভিন্ন পয়েন্টে লগ যুক্ত করুন এবং আপনি যা প্রত্যাশা করছেন তার সাথে তুলনা করুন। উদাহরণস্বরূপ, দেখুন যে ফাংশনটি আপনি মনে করেন সেখানে বাগ রয়েছে এমনকি প্রথম স্থানে ডাকা হয়েছিল। কোনও পদ্ধতির শুরুতে ভেরিয়েবলগুলি সেগুলি আপনি কী ভাবেন সেগুলি দেখুন। ব্রেকপয়েন্টগুলি থেকে পৃথক, অনেকগুলি লগ লাইন থাকায় এটি ঠিক আছে যাতে বিশেষ কিছু ঘটে না। আপনি কেবল লগের পরে অনুসন্ধান করতে পারেন। আপনি যখন প্রত্যাশা করছেন তার থেকে আলাদা লগ রেখায় একবার আঘাত করেন, একই জায়গায় আরও যুক্ত করুন। বাগড অঞ্চলে প্রতিটি লাইন লগ করতে সক্ষম হওয়ার মতো ছোট হওয়া অবধি এটিকে আরও দূরে এবং আরও সঙ্কুচিত করুন।
অন্তর্ভুক্তি ব্যবহারকারীর কাছে একবার প্রভাব ফেলেছে তার পরিবর্তে দৃser়তার সাথে ভুল মানগুলিকে ফাঁদে ফেলতে ব্যবহার করা যেতে পারে। আপনি যত দ্রুত একটি ভুল মান ধরেন, ততই ততই কাছাকাছি আসার সময় এটি তৈরি করে।
রিফ্যাক্টর এবং ইউনিট পরীক্ষা। যদি আপনার প্রোগ্রামটি খুব বড় হয় তবে এটি একবারে এক শ্রেণি বা একটি ফাংশন পরীক্ষা করা উপযুক্ত। এটিকে ইনপুট দিন এবং ফলাফলগুলি দেখুন এবং কোনটি আপনার প্রত্যাশা মতো নয়। একটি সম্পূর্ণ প্রোগ্রাম থেকে একটি একক ফাংশনে ত্রুটি সংকুচিত করতে সক্ষম হওয়া ডিবাগিং সময়ের ক্ষেত্রে একটি বিশাল পার্থক্য করতে পারে।
মেমরি ফাঁস বা মেমরি স্টম্পিংয়ের ক্ষেত্রে, উপযুক্ত সরঞ্জামগুলি ব্যবহার করুন যা রানটাইম এগুলি বিশ্লেষণ করতে এবং সনাক্ত করতে সক্ষম। প্রকৃত দুর্নীতি কোথায় ঘটে তা সনাক্ত করতে সক্ষম হওয়া প্রথম পদক্ষেপ। এর পরে, যেখানে ভুল মানগুলি চালু হয়েছিল সেখানে ফিরে যাওয়ার পথে আপনি লগগুলি ব্যবহার করতে পারেন।
মনে রাখবেন যে ডিবাগিং একটি প্রক্রিয়া পিছনে যাচ্ছে backward আপনার শেষ ফলাফল রয়েছে - একটি বাগ - এবং এর কারণটি আগে খুঁজে বের করার কারণটি সন্ধান করুন। এটি আপনার পথে পিছনে কাজ করার বিষয়ে এবং দুর্ভাগ্যক্রমে, ডিবাগারগুলি কেবল সামনের দিকে এগিয়ে যায়। এখানেই ভাল লগিং এবং পোস্টমর্টেম বিশ্লেষণ আপনাকে আরও ভাল ফলাফল দিতে পারে।