[? | DAN ARMADARAS:?] হাই, আমি [আছি? ড্যান Armadaras?]. আজকে আমরা চলুন ডিবাগ করা খুঁজছি. নেই শুধু আমরা করতে যাচ্ছি কিছু কৌশল সম্পর্কে কথা বলতে, কিন্তু আমরা তাকান চলুন বৈশিষ্ট্য কিছু অন্তর্ভুক্ত অনুমতি যে CS50 আইডিই মধ্যে আপনি সহজেই একটি প্রোগ্রাম ডিবাগ. শুধু একটা উদাহরণ ভুল হয়ে যেতে পারে এমন কিছু এবং এটা আসলে এমন কিছু আমরা ইতিমধ্যেই আগে দেখা করেছি যে. এই ক্ষেত্রে, এই একটি সি প্রোগ্রাম যে, ব্যবহারকারী থেকে একটি পূর্ণসংখ্যা গ্রহণ দুই দ্বারা এটি ভাগ, এবং উপলব্ধ ফিরে ব্যবহারকারী যাও আউটপুট. এখন আমরা দেখা করেছি তা থেকে আগে বক্তৃতা করেন, আমরা আসলে এই হতে হবে জানি যে বিভাগ সমস্যার সুনির্দিষ্ট আমরা বিজোড় সংখ্যার আছে. বিশেষত, আমরা শুধু দূরে নিক্ষেপ করব দশমিক বিন্দু পরে কিছু. এখন, আমরা এই যে জানেন ক্ষেত্রে হতে হবে. এবং আমরা এটিকে চালাতে হয়, তাহলে আমরা নিশ্চিত করতে পারেন কম্পাইল করে প্রথম আমাদের সন্দেহের,. এবং তারপর, চলমান দ্বারা এবং একটি বিজোড় সংখ্যা লিখে. এটা নতুন কিছু না. কিন্তু আসলে এই একটি হল একটি বাগ এর উদাহরণস্বরূপ যে একটি বড় প্রোগ্রাম মধ্যে উপস্থিত হতে পারে যে খুঁজিয়া বাহির করা কঠিন হয়ে যায়. আমরা কি সমস্যা জানি যদিও বিষয়টি সত্য মূল অংশ চিহ্নিত করার চেষ্টা করা যেতে পারে বিশেষভাবে যেখানে ত্রুটি দেখা দেয়, কি যে সমস্যা চিহ্নিত হয়, এবং তারপর এটি নির্ধারণ. সুতরাং এই একটি উদাহরণ হিসাবে প্রদান কিছু হতে পারে তা নিয়ে আমরা ইতিমধ্যে জানি কিন্তু সমাহিত করা যেতে পারে যে কোড অন্যান্য উপাদানের মধ্যে. সুতরাং এই অন্যান্য উৎস খোলার একটি উদাহরণ হিসেবে কোড ফাইল, এই বিভাগের এখন সমস্যা হল একটি বৃহত্তর কর্মসূচির অংশ. এখনও একটি সামান্য হতে পারে বিট সুউচ্চ নির্মাণ, এবং আমরা সহজেই করতে সক্ষম হতে পারেন বিশেষ করে, এটা চিহ্নিত আমরা শুধু এই নিয়ে আলোচনা করছি, যেহেতু. কিন্তু আমরা এই যে জিনিসটা করতে পারেন সমস্যা একটি বড় স্কেলে উপস্থিত হতে পারে. আমি এখন এই সঙ্কলন এবং যদি এটি একটি বিজোড় সংখ্যা লিখতে চালানো, আমরা সঠিকভাবে পেতে না দেখতে পারেন আমরা আশা থাকতে পারে আউটপুট. এই বিশেষ ক্ষেত্রে, আমরা বলতে পারেন যে আমরা সংখ্যার সকল গণনা করতে চান এক থেকে আপ কিছু নির্দিষ্ট নম্বরে. আর আমরা যে আমরা দেখতে পারেন বিষয় বিভিন্ন আছে আমরা outputting করছি এখানে যদি সহজভাবে, 0 এবং 1 আমরা 5 এর একটি ইনপুট প্রদান যখন. সুতরাং আমরা ইতিমধ্যে জানি যে একটি সমস্যা আছে এখানে. কিন্তু আমরা সঠিকভাবে জানি না হতে পারে যেখানে এই ইস্যু আসলে বিদ্যমান. উপায় এখন এক যে আমরা এই সমাধানের জন্য চেষ্টা করতে পারেন আমরা করেছি এমন কিছু বিষয় যা ইতিমধ্যে চালু হয়েছে. আমরা শুধু একটি বড় স্কেলে এটি ব্যবহার করতে পারেন. লাইন 14 উপর, আমরা আছে এই printf ফাংশন, যা আমাদের রাষ্ট্র প্রিন্ট আউট করতে পারবেন তথ্য বিভিন্ন টুকরা. আর এই কিছু যে আপনি আপনার প্রোগ্রামের মধ্যে লিভারেজ উচিত ঠিক কি চিন্তা করার চেষ্টা করতে কোড বিভিন্ন লাইনের ঘটছে. তাই এই নয়, এমনকি যদি চূড়ান্ত আউটপুট যে আমরা আসলে বাইরে উত্পাদন করতে চান এই প্রোগ্রাম, আমরা এখনও কিছু ডিবাগ থাকতে পারে বিবৃতি যেখানে আমরা চিন্তা করার চেষ্টা করতে পারেন অবিকল কি আমাদের কোড ভেতরে কী ঘটছে. তাই এই ক্ষেত্রে, আমি আছি ডিবাগ ট্যাগ দিয়ে printf. এই ক্ষেত্রে, এই হল শুধু একটি ডিবাগ পংক্তি আমি আপ-নির্বাণ তাই এটি হয়ে যে আছি আমার কোডের আউটপুট খুব স্পষ্ট কি এটা আমি দেখাতে চাই. সংখ্যা এখানে আউটপুট আমরা নির্ণিত যে. এই ক্ষেত্রে, আমি বল অবিকল জানতে চান কি আগে কী ঘটছে এবং কিছু নির্দিষ্ট গুনতি পরে. তাই আমি আগে একটি printf ব্যবহার হতে পারে এবং কোড যে লাইন পরে. এই ক্ষেত্রে, আমি এমনকি পারা এটি একটি সামান্য বিট আরো পরিষ্কার করতে আগে ডিবাগ বলার অপেক্ষা রাখে না এবং ডিবাগ তাই পরে আমি সঙ্গে নিজেকে গুলান না যে অভিন্ন চেহারা যে একাধিক লাইন. এখন আমরা এই এবং চালান কম্পাইল যদি এটা, আবার পাঁচ মত একটি সংখ্যা লিখুন আমরা আছে দেখতে পারেন এখন আগে ও পরে আউটপুট আমি প্রত্যেক বস্তু স্পষ্ট কাজ না করে যে এটি বিভাগ বা স্পষ্ট সংখ্যা হচ্ছে আমরা আসলে কি করতে চান যে. এখন এই ক্ষেত্রে, এই হল না সত্যিই একটি স্পষ্ট আউটপুট. এটা সত্যিই একটি স্পষ্ট ফলাফল না যে আমরা এই বিশেষ প্রোগ্রাম আউট করতে চান. আর এই একটি, আবার হয় অল্প সুউচ্চ নির্মাণ. কিন্তু, সম্ভবত, জিনিস যে এক নির্দিষ্টকরণ বলেন তাহলে আমরা কি করতে পারে আমরা এই বিভক্ত করতে চান যে 2 এবং তাই অন্য কথায় 1 টি, যোগ আমরা তখন বইয়ের নাম আপ সুসম্পন্ন করতে চান আমরা পারা মানুষ তা জানে না এই ক্ষেত্রে, যে নির্দিষ্ট জিনিস করতে. এখন এখানে আমরা হবে জানি আমাদের আধলা সংখ্যা 1 যোগ করতে পারবেন. এর এই কম্পাইল করা যাক এবং এই যে নিশ্চিত আমরা চাই যে ভাবে ব্যবহার করা হয়. আমরা এখন আগে দেখতে পারেন থাকার, আমরা 5 নম্বর আছে. থাকার পর, আমরা সংখ্যা 3 আছে আমাদের স্পেসিফিকেশন অনুযায়ী যা, আমরা কি করতে চেয়েছিলেন কি. কিন্তু আমরা তাকান এখানে আউটপুট, আমরা যা করতে পারেন আমরা অন্য থাকতে পারে যে দেখতে যা সম্পূর্ণভাবে বাগ, আমরা 0 থেকে আমাদের গননা শুরু হয় যে. এখন আবার এই এমন কিছু বিষয় আমরা অতীতে দেখেছি যে এবং আমরা বেশ সহজেই ঠিক করতে পারবো. কিন্তু এই ক্ষেত্রে, আমরা এছাড়াও সুবিধার ছিল printf, বিবৃতি ব্যবহার করে সরাসরি লুপ জন্য ভেতরে অবিকল যেখানে জানা যে ত্রুটি ঘটছে ছিল. তাই printf বিবৃতি সাহায্য খুব দরকারী আপনি যেখানে নির্ধারণ, অবিকল আপনার সোর্স কোড, একটি নির্দিষ্ট ত্রুটি ঘটছে. এবং এটি উপলব্ধি করা জরুরী যে, আমরা কোড লেখার হিসাবে, আমরা অনুমানের থাকতে পারে একটি প্রোগ্রাম রাষ্ট্র সম্পর্কে. অথবা আমরা অনুমানের থাকতে পারে কর্মসূচির অংশ সম্পর্কে আসলে সঠিক বা যখন ভুল হয় পরবর্তী আমরা যে প্রোগ্রাম নির্মাণ হিসাবে এবং এটি একটি অংশ করতে জটিল এবং বড় প্রোগ্রাম আমরা কিছু দৃষ্টিভঙ্গি বুঝতে পারি যে যে আসলে বগী. Printf ব্যবহার সত্যিই সাহায্য করতে পারেন অনুসন্ধানে এবং চিহ্নিত একটি প্রোগ্রাম অঞ্চলে যে হতে পারে না ঠিক ভাবে ব্যবহার করা যে আমরা আমাদের অনুমানের উপর ভিত্তি করে, আশা. কিন্তু অন্যান্য সরঞ্জাম আছে পাওয়া যায়, পাশাপাশি, যে আমাদের চিন্তা করার চেষ্টা করার অনুমতি যেখানে একটি ত্রুটি ঘটছে আউট এবং এছাড়াও, বিশেষভাবে, কি জিনিষ প্রোগ্রামের ভিতর ঘটছে. তাই ব্যবহার printf, খুব হয় দরকারী যখন আমরা চাই নির্দিষ্ট এলাকায় চিহ্নিত করা কিছু বাগ আছে একটি প্রোগ্রাম. কিন্তু এটি হয়ে একটা সময় পরে ক্লান্তিকর. এই ক্ষেত্রে, এই একটি হল অপেক্ষাকৃত সহজ প্রোগ্রাম মাত্র এক বা দুটি ভেরিয়েবল সঙ্গে. এবং এটা আমাদের জন্য খুব সহজ হয়ে যায় যারা ভেরিয়েবল এর মান প্রিন্ট আউট বৃহত্তর কর্মসূচির প্রেক্ষাপটে. কিন্তু আমরা একটি ভিন্ন থাকতে পারে অনেক ভেরিয়েবল আছে যে প্রোগ্রাম. এবং এটা বেশ নাও হতে পারে printf, তাই ব্যবহার করা সহজ কী ঘটছে তা নির্ণয় করার চেষ্টা যারা ভেরিয়েবল প্রতিটি এক প্রোগ্রাম হিসাবে নির্বাহ করা হয়. বিদ্যমান একটি প্রোগ্রাম আছে একটি ডিবাগার প্রোগ্র্যাম ডাকা. এই ক্ষেত্রে, এক যে আমরা আমাদের কাজ করি ব্যবহার,, GDB গনু ডিবাগার হয়, অথবা যে আমাদের অভ্যন্তরীণ পরিদর্শন করতে পারবেন একটি আরো অনেক কিছু একটি প্রোগ্রাম এর ক্রিয়াকাণ্ড বিস্তারিত ভাবে. আমরা আসলে নির্বাহ করতে পারেন কমান্ড লাইন থেকে, GDB এখানে কেবল, GDB এবং টাইপ করে আমরা ডিবাগ করতে চান যে কমান্ড. এই ক্ষেত্রে, গণনা. এখন এই ক্ষেত্রে, আমরা এটা দেখতে পারেন , GDB বলছেন যে একটি প্রম্পট আমাদের এনেছে. আমরা আসলে যা করতে পারেন যাও GDB কমান্ডগুলো আসলে সঞ্চালনের আরম্ভ প্রোগ্রাম, নির্দিষ্ট বিন্দুতে এটা বন্ধ, ভেরিয়েবল এবং মূল্যায়নের ভেরিয়েবল পরিদর্শন করে প্রোগ্রাম রাজ্যের অস্তিত্ব সেই বিশেষ মুহূর্তে, এবং তাই এবং তাই ঘোষণা. এটা আমাদের ক্ষমতা উপলব্ধ করা হয় অনেক. কিন্তু এটা যাতে ঘটবে যে এ CS50 আইডিই একটি GUI বা ব্যবহারকারীর উপলব্ধ , GDB জন্য ইন্টারফেস যে আমাদের প্রয়োজন ছাড়া এই কাজ করতে পারবেন সবটা কমান্ড লাইন ইন্টারফেস বা এ সব এমনকি. আমি যে অ্যাক্সেস করতে পারেন যে ভাবে ডিবাগ বাটন ব্যবহার করে এবং CS50 আইডিই খুব শীর্ষে. এখন অতীতে আমরা কি আছে দেখা আমরা কমান্ড ব্যবহার করা হয় লাইন কম্পাইল এবং তারপর একটি প্রোগ্র্যাম চালাতে আপনাকে. ডিবাগ বাটন আছে সেই পদক্ষেপ উভয়. কিন্তু এটি উদ্গীরণ করা হবে পর্যন্ত ডানদিকে ডিবাগার ট্যাব যে আমাদের বিভিন্ন পরিদর্শন করতে পারবেন প্রোগ্রাম বৈশিষ্ট্য হিসাবে এটি নির্বাহ করা হয়. আমি এই মধ্যে, ডিবাগ ক্লিক করা হলে ক্ষেত্রে, এটা উদ্গীরণ করা হবে কনসোল একটি নতুন ট্যাব খুব নীচে উইন্ডো. এবং যদি আপনি এই ট্যাবে আছে দেখতে পারেন খুব উপরের কিছু তথ্য. আর আমরা মূলত এই উপেক্ষা করতে পারেন. কিন্তু কিছু এক আমরা লক্ষ্য করতে চাই যে এটা আউটপুট হয় একই জিনিস যে আমরা আমরা প্রয়োগ করতে চালানোর চেষ্টা করে পেতে হবে টার্মিনাল উইন্ডোতে সি প্রোগ্রাম. এখানে, আমরা এটা ঝনঝন চলমান দেখতে পারেন, এবং এটি পতাকার বিভিন্ন আছে, এবং এটা আমাদের count.c ফাইল কম্পাইল করা হয় যা সময়ে নির্বাচিত ট্যাব ছিল যে আমি ডিবাগ আঘাত. তাই এই কারণে যে খুব দরকারী নয় এখন এই ডিবাগ বাটন ব্যবহার করে, আমরা একযোগে তারপর কম্পাইল এবং পারেন প্রোগ্রাম চালানো যে আমরা আসলে চালাতে চান. যে পতাকার একটি গুরুত্বপূর্ণ, এই ক্ষেত্রে, আমরা আসলে ব্যবহার করছি দীর্ঘতম সময়ের জন্য কিন্তু শুধু কিছু হাতে না waving [শ্রবণাতীত], যা ঠিক এই এক. ঝনঝন, এটা -ggdb3 বলেছেন. এই ক্ষেত্রে, আমরা কি হয় ঝনঝন বলার, আমাদের কম্পাইলার, আমরা আমাদের প্রোগ্রাম কম্পাইল করতে চান না. কিন্তু কি আছে প্রদান নামক প্রতীক তথ্য কম্পাইলার আসলে এক্সেস আছে যাতে অন্তর্নিহিত তথ্য অনেক যাও প্রোগ্রামের মধ্যে রয়েছে. আরো নির্দিষ্টভাবে, সংখ্যা আমি যে ফাংশন, যারা ফাংশন নাম, ভেরিয়েবল, ধরনের যারা ভেরিয়েবল, এবং বিভিন্ন হয় ডিবাগার সাহায্য অন্য যে তার অপারেশন সম্পাদন. এখন আরো কিছু বিষয় আছে যে উল্লেখ করা জরুরী যখন আমরা চলমান আলোচনা করছি এই ভাবে একটি প্রোগ্রাম. এটা আসলে হয়েছে যে লক্ষ্য আমাদের কনসোল একটি নতুন ট্যাব প্রতিপালিত নিচ বরাবর. আমরা আর যোগাযোগ করার আছে সরাসরি টার্মিনাল উইন্ডোর সাথে. কিন্তু এই নতুন ট্যাবটি আসলে একটি টার্মিনাল উইন্ডোর. এটা শুধু চলমান নির্দিষ্ট আমরা তৈরি করেছি যে প্রোগ্রাম. এ, নীচে যে লক্ষ্য করুন কিছু আউটপুট সঙ্গে সমন্বয় কম্পাইলার এবং GDB ঝনঝন শব্দ দ্বারা, আমরা মূলত উপেক্ষা করতে পারেন, যা, এটা আসলে আউটপুট দেখায় খুব নীচে আমাদের প্রোগ্রাম. এখন এটা বুঝতে গুরুত্বপূর্ণ যে আসলে এই একটি উইন্ডো আপনাকে দেখাতে হবে আপনার প্রোগ্রাম থেকে আউটপুট কিন্তু ইনপুট গ্রহণ করতে পারেন যে প্রোগ্রাম এর জন্য, হিসাবে ভাল. তাই বলে যে নোটিশ একটি সংখ্যা লিখুন, যা আমরা ছিল যে একই আউটপুট আগে টার্মিনাল উইন্ডোতে ছিল. কিন্তু এটা এখন এই নতুন ট্যাবে দেখানো হচ্ছে. আমি ইনপুট একটি সংখ্যা পারেন. এবং এটা আসলে হবে ফাংশন হিসাবে আমরা আশা আমাদের ডিবাগ দেখাচ্ছে, আউটপুট, বগী হতে পারে যে আউটপুট, হিসাবে আমরা আগে দেখা করেছি. আর খুব নীচে, এটা আসলে কিছু অতিরিক্ত আউটপুট আছে জিডিপি থেকে শুধু যে বলার অপেক্ষা রাখে না এই প্রোগ্রাম সম্পন্ন করেছে. এখন আপনি এই দেখেছি মাধ্যমে বিশেষ সংখ্যা, এটি বিশেষ করে ছিল না দরকারী এমনকি কারণ আমরা ছিল যদিও ডিবাগার মেনু আসা আপ, এই এখনও একটি চলমান প্রোগ্রাম ছিল. কোনো পর্যায়েই আসলে তা আমাদের জন্য মৃত্যুদন্ড বিরতি সব পরিদর্শন পাবে ভেরিয়েবল মধ্যে অন্তর্ভুক্ত. আরো কিছু বিষয় আছে আমরা যাতে না আছে আমরা চাই যে চিনতে, GDB পেতে প্রোগ্রাম সঞ্চালনের বিরতি এবং শুধু এটি এগিয়ে যেতে অনুমতি দেয় না সাধারণত আমরা অন্য কোন ক্ষেত্রে যেভাবে. মৃত্যুদন্ড বিরতি করার, কিছু নির্দিষ্ট লাইনে, আমরা কি তৈরি করতে হবে একটি বিরতি বিন্দু বলা. এবং একটি বিভাজক বিন্দু খুব সহজেই তৈরি করা হয় এই আপনার মাউস গ্রহণ করে আইডিই CS50 এবং বাম থেকে সরাসরি ক্লিক কিছু নির্দিষ্ট লাইন সংখ্যা. আমি তা করতে হলে, একটি লাল বিন্দু যা নির্দেশ করে, মনে হচ্ছে, যে যে লাইন এখন একটি বিরতি বিন্দু. এবং আমি GDB চালানোর যে পরবর্তী সময়, এটা যে বিরতির সময়ে সঞ্চালনের থামাতে হবে এটা কোড যে লাইন ছুঁয়েছে যখন. এখন এই একটি গুরুত্বপূর্ণ জিনিস বুঝতে এটা না যে অগত্যা ক্ষেত্রে যে কোড প্রতিটি লাইন আসলে প্রবেশযোগ্য. আমি একটি ফাংশন তৈরি করতে হলে এখানে, example-- অকার্যকর চ জন্য এবং শুধু হ্যালো এখানে একটি মুদ্রণ লাইন না world-- আমি এই ফাংশন কল করা না হলে, এটা যদি হতে হবে যে, আমি এখানে একটি বিভাজক পয়েন্ট সেট যদি, ফাংশন বলা হবে না. আর তাই, এই বিশেষ বিরতি বিন্দু আসলে বিরতি হবে না প্রোগ্রাম সঞ্চালনের. সুতরাং আসুন আমি সঠিকভাবে তৈরি যে বলা যাক কোড কিছু লাইনে একটি বিরতি বিন্দু যে আসলে মৃত্যুদন্ড কার্যকর করা হবে. এখন এই ক্ষেত্রে, এই হল প্রধান ফাংশন প্রথম লাইন. তাই এটা অবশ্যই ক্ষেত্রে হতে হবে যে, আমি মৃত্যুদন্ড শুরু যত তাড়াতাড়ি, প্রথম লাইন পৌঁছেছেন করা হবে. , GDB মৃত্যুদন্ড বিরতি করবে. এবং তারপর, আমি করতে সক্ষম হবে ডিবাগার সঙ্গে যোগাযোগ করার জন্য. আপনি একাধিক লাইন সেট করতে পারেন আপনি যদি চান, ব্রেকপয়েন্ট. আমরা একটি লাইন আপ তৈরি করতে পারেন এখানে কোড এই সেগমেন্ট যে পৌঁছেছেন করা হবে না. আর আমরা উদাহরণ আরও নীচে এক সেট করতে পারেন. কারণ যে আমরা আমরা করব এই কাজ করতে চান আরো একটি সামান্য বিট ঢোকা মাত্র কয়েক মিনিটের মধ্যে বিস্তারিত. তাই এখন জন্য, আমাকে শুধু নিষ্ক্রিয় দিন এই অতিরিক্ত বিরতি পয়েন্ট আমরা কি তাকান পারেন যাতে আমি এক একক বিরতি আছে আমার প্রোগ্রাম বিন্দু. আমি করেছি কিছু এই প্রোগ্রাম পরিবর্তন. তাই আমি এটি সংরক্ষণ করা প্রয়োজন. আমি ডিবাগ টিপব যে আমি তাই সংকলন শুরু এবং তারপর ডিবাগার সঞ্চালনের. আমরা দেখতে হবে, যে মুহূর্ত, পরে আমরা বিরতি হিসেবে নির্বাচিত যে লাইন বিন্দু হলুদ হাইলাইট করা হয়. আমরা যে লক্ষ্য করা যেতে পারে ডিবাগ প্যানেলে উপরের ডান বিরাম আইকন প্রমাণিত হয়েছে যে একটু খেলার আইকনের মধ্যে. এই জন্য আমরা বিরতি আছে মানে মৃত্যুদন্ড, এই বিশেষ ক্ষেত্রে. এবং প্লে বাটন হবে আঘাত আমাদের মৃত্যুদন্ড পুনরায় শুরু করার অনুমতি যে নির্দিষ্ট সময়ে. অন্যান্য দুয়েক আছে বিজ্ঞপ্তি এই ডিবাগ প্যানেল পাওয়া বোতাম, আরো. আমাকে যা করতে পারবেন, স্টেপ ওভার কোড যে এক লাইন চালানো এবং যে লাইন উপর পইঠা এই ক্ষেত্রে পরবর্তী এক, যা, printf, যে অর্থ হবে বিবৃতিতে মৃত্যুদন্ড কার্যকর করা হয়. এবং তারপর বিরতি হবে তাই ভালো লাইন 13 মৃত্যুদন্ড. এবং একটি ধাপে আছে ফাংশন মধ্যে যা আমি অন্য তৈরি করেছেন তাহলে দরকারী অন্যত্র সোর্স কোড ফাংশন. আর আমি ভাগ দিতে চান যারা ফাংশন বদলে সামগ্রিকভাবে যে ফাংশন চালানো. কিন্তু আমরা ধাপে এ আরো দেখুন করব মাত্র কয়েক মিনিটের মধ্যে ফাংশন মধ্যে. এখন অন্য কিছু বিষয় লক্ষ্য করে আসলে এই ডিবাগ প্যানেলের মধ্যে বিদ্যমান. আমরা এই প্যানেল বলা আছে যা আমাদের দেখায়, স্ট্যাক কল ঠিক আমরা যেখানে. এই ক্ষেত্রে, আমরা ভিতরে হয় প্রধান ফাংশন. আমাদের স্ক্রিপ্ট count.c বলা হয়. এবং আমরা হতে ঘটতে লাইন 13, কলাম এক, যা কি হাইলাইট অঞ্চল অবিকল সোর্স কোড হিসাবে ভাল, নির্দেশ করে. এখন এই দেখায় যে লক্ষ্য স্থানীয় পরিবর্তনশীল ধারার অধীন ভেরিয়েবল সব যে এই ফাংশন মধ্যে বিদ্যমান. এটা খেয়াল করা জরুরী ভেরিয়েবল সব যে এই স্থানীয় পরিবর্তনশীল প্রদর্শিত হবে একটি ফাংশন মধ্যে অধ্যায়, এমনকি তারা সংজ্ঞায়িত হয় আগে. আমরা একটি পরিবর্তনশীল আছে এখানে দেখতে পারেন NUM ডেকে 0 একটি ডিফল্ট মান আছে, এবং এটি int- এ টাইপ. এখন আমরা আসলে আরম্ভ করার পূর্বে এই ভেরিয়েবল সব, আমরা অগত্যা না হন 0 একটি মান দেখতে নিশ্চিত. আর অন্যান্য মৃত্যুদন্ড উপর নির্ভর আপনি সম্পাদিত হয়েছে যে এবং আপনার মেমরি যখন রাজ্যের আপনি আসলে এই প্রোগ্রাম চালানো, আপনি যে খুঁজে পেতে পারে 0 মান দেখতে না এবং, এর পরিবর্তে অন্য কিছু পাগল নম্বর. কিন্তু যে বিষয়ে চিন্তা করবেন না. এটা না হওয়া পর্যন্ত প্রাসঙ্গিক হতে যাচ্ছে না আপনি আসলে মান আরম্ভ. এখন এই ক্ষেত্রে, আমরা দেখতে পারেন আমি কিছু আউটপুট সম্পাদিত হয়েছে. তখন আমি বললাম, ঠিক আছে এখন, মৃত্যুদন্ড বিরতি দেওয়া করছি. কিন্তু এই ক্ষেত্রে, কি আমি কি সত্যিই কাজ করতে চান এখন এই রেখা উপর পইঠা হয় কোড তাই আমি আসলে যা করতে পারেন যে যে কোন int জন্য ব্যবহারকারীর অনুসন্ধানের যে আমরা আমাদের প্রোগ্রাম ব্যবহার করতে চান. এখন এই ক্ষেত্রে, যখন আমি নোটিশ ওভার ধাপে আঘাত বরং বিরাম বা পুনঃসূচনা বাটন এই বিরাম বাটন পরিবর্তিত হয়েছে এই কোড আসলে নির্বাহ করা হয়, কারণ. কি ঘটছে এই মুহূর্তে এটা যে হয় ইনপুট আমাদের জন্য কিছু তথ্য অপেক্ষা আমরা আমাদের আউটপুট টেক্সট করে দেখতে পারেন খুব নীচে. তাই এই মুহূর্তে, এই হল আসলে বিরতি দেওয়া না, যদিও এটা সাজানোর, মনে হচ্ছে, কিছুই ঘটছে কারণ হতে. কিন্তু এটা যাতে ঘটবে যে লাইন 13 আমার নির্দিষ্ট ক্ষেত্রে, আমি ব্যবহারকারীর ইনপুট জন্য অপেক্ষা করছি. আর তাই GDB পরিদর্শন করতে পারবেন না এটা যেমন একটি প্রোগ্রাম চালানো সম্ভব. আমি কিছু লিখতে যে এখন পরের বার ইনপুট তাই আমি যে সংখ্যা 5 লিখবেন আমরা দেখা করেছি রিটার্ন আঘাত past--, এবং আমরা যে, অবিলম্বে, GDB, pauses লক্ষ্য এবং, আবার পরের লাইন তুলে ধরে. কিন্তু একটি হিসাবে, এখন যে লক্ষ্য আমাদের একটি মান inputting এর ফলে, আমরা ভেতরে যে মান আপডেট করা হয়েছে আমাদের স্থানীয় ভেরিয়েবল, যা অবিকল জানতে খুবই দরকারী কি যে সংখ্যা মেমরি ছিল. এখন আমি এই প্রোগ্রাম অবিরত করার অনুমতি দিতে পারে তার মৃত্যুদন্ড শেষ পর্যন্ত খেলে পুনঃসূচনা আঘাত দ্বারা. আমরা খুব দ্রুত দেখতে পারেন প্রোগ্রাম ফিনিস নির্বাহ করে একই আউটপুট যে সঙ্গে আমরা আগে ছিল, ডিবাগার প্রচেষ্টা, এবং এখন এই প্রোগ্রাম সম্পূর্ণ বন্ধ করে দিয়েছে. আমি দেখাতে শুধুমাত্র জন্য যে এইজন্য উদ্দেশ্যে কি আমরা আসলে পুনঃসূচনা আঘাত যখন ঘটবে. কিন্তু আমরা আসলে করতে যাচ্ছি এই প্রোগ্রামের মধ্যে ফিরে যেতে চাই আমরা ডিবাগ করার চেষ্টা করতে পারেন, যাতে অবিকল ঘটছে তা. আমি ডিবাগার ব্যবহার করছি যে এখন আমি may এই ডিবাগ printf বিবৃতি প্রয়োজন না. আমি কি করব হিসাবে তাই আমি তাদের অপসারণ করতে পারে এখন শুধু আমাদের সহজ কোড ফিরে যেতে আমরা একটি মুহূর্ত আগে ছিল যে. এখন আমি বাঁচাতে হলে প্রোগ্রাম এবং এটি চালানো, এটা, আবার যে প্রাথমিক যেতে হবে আমি লাইন 11 ছিল যে বিন্দু বিরতি. আর আমি পরীক্ষা করতে সক্ষম হবেন আমার ভেরিয়েবল আমি কাজ করতে চান হিসাবে. এটা ঠিক তাই এই যে ঘটবে অংশ, খুব আকর্ষণীয় নয় আর আমি যাচ্ছি জানি যে এই বিবৃতি প্রিন্ট আউট. একটি সংখ্যা লিখুন. এবং তারপর, আমি যাচ্ছি জানি যে যে পূর্ণসংখ্যা জন্য ব্যবহারকারীকে জিজ্ঞাসা করতে. তাই সম্ভবত, আমি আসলে সরাতে চান আমার নিচে একটি সামান্য বিট আরও পয়েন্ট ব্রেক. আপনি বিরতি পয়েন্ট অপসারণ করতে পারেন সরাসরি, আবার ক্লিক করে যে লাইন সংখ্যা বাঁদিকে. যে লাল বিন্দু নির্দেশ করে, অদৃশ্য হয়ে যাবে যে বিরতি বিন্দু এখন চলে গেছে যে. এখন এই ক্ষেত্রে, মৃত্যুদন্ড বিরতি দেওয়া হয়েছে. আর তাই এটি আসলে যাচ্ছে না যে বিশেষ ইনস্ট্যান্সের মধ্যে পুনরায় শুরু করুন. কিন্তু আমি একটি বিরতি সেট করতে পারেন কিছুক্ষন পরে নির্দেশ. আর আমি এখন পুনরায় শুরু যখন আমার কোড, এটি পুনরায় চালু হবে বলুন যে বিরতি বিন্দু বিন্দু. আবার, আমি পুনঃসূচনা আঘাত. কিছু ঘটছে মত মনে হয় না. কিন্তু যে আমার, কারণ এর কোড ইনপুট জন্য অপেক্ষা করছে. আমি একটি সংখ্যা 5 লিখতে আঘাত লিখুন, এবং হবে এখন পরের বিরতি বিন্দু আঘাত করা হবে. এখন এই ক্ষেত্রে, এই কোড লাইন যে, আগে আমরা জানতাম বগী হতে ঘটেছে. তাই এর কি মূল্যায়নের দিন সময়ের এই নির্দিষ্ট সময়ে. একটি লাইন হাইলাইট করা হয়, তখন এই লাইন এখনো মৃত্যুদন্ড কার্যকর করা হয় নি. তাই এই ক্ষেত্রে, আমরা দেখতে পারেন আমি একটি সংখ্যা, আছে যা আমি একটি পূর্ণসংখ্যা নামক আছে একটি মান 5 আছে NUM. আর আমি সম্পাদন করা যাচ্ছে না যে সংখ্যার উপর কিছু গণিত. আমি যে উপর পইঠা, তাহলে আমরা যা করতে পারেন NUM জন্য যে মূল্য লক্ষ্য অনুযায়ী পরিবর্তিত হয়েছে আমরা আসলে কাজ করেছি যে পাটিগণিত. এবং এখন আমরা যে ভিতরে লুপ জন্য এই বা এখন যে লুপ জন্য নিজেই হাইলাইট হয়, আমরা একটি নতুন আছে দেখতে পরিবর্তনশীল যে আমি বলা লুপ জন্য যে ব্যবহার করা যাচ্ছে. এখন যে আমি আগে মনে কখনও কখনও আপনি যে উল্লেখ ক্রেজি কিছু দেখতে যাচ্ছে যে সংখ্যার আগে ডিফল্ট হিসাবে নম্বর অথবা যে পরিবর্তনশীল আসলে সক্রিয়া. আমরা সঠিকভাবে দেখতে পারেন এখানে এই পরিবর্তনশীল না যা, আমি বলা এখনও সক্রিয়া করা হাইলাইট সময়. কিন্তু আমরা এটা কিছু সংখ্যা আছে দেখতে পারেন আমরা আসলে আশা করবেন না যে. ঠিক আছে. এটা নিয়ে চিন্তা করবেন না আমরা না আসলে আছে, কারণ আমি যে পর্যন্ত সংখ্যা সক্রিয়া এই লাইন এবং মান উপর পইঠা আমি মান 1 সক্রিয়া করা হয়েছে. সুতরাং যে আসলে যে দেখতে কেস, এর উপর পইঠা যাক. আমরা এখন দেখতে পারেন যে লাইন মৃত্যুদন্ড কার্যকর করা হয়েছে. আর আমরা এখন হাইলাইট করা হয় এই printf লাইন. আর আমরা এখন কিভাবে আমাদের মান দেখতে পারেন আমি এবং 3 সময়ের পরিবর্তিত হয়েছে. এই সত্য না, খুবই দরকারী, বারবার লাইনের উপর পইঠা হয়. আর আপনি কি আসলে এটি করতে পারেন আপনার জন্য লুপ এর ভিতরে ঘটবে এবং কি ঘটবে ভিতরে লুপ জন্য যে ভেরিয়েবল যে প্রোগ্রাম সঞ্চালনের হিসাবে একটি সময়ে এক ধাপ ঘটে. এখন এই সময়ে, আমি শুধু যথেষ্ট ওভার সোপানযুক্ত আমি এখন আমার প্রোগ্রাম শেষে am যে. আমি যে উপর পইঠা, তাহলে তা হবে আসলে মৃত্যুদন্ড ক্ষান্ত আমরা অতীতে দেখেছি. তাই, আমার এখনো আবার, এই পুনরায় আরম্ভ করা যাক আমি অন্য কিছু বাতলান করতে পারে, আরো. এই ক্ষেত্রে, এটা হয় এখন আবার আমাকে জিজ্ঞাসা, একটি সংখ্যা, যা আমি আবার লিখতে হবে. কিন্তু এই সময়, আমি লিখতে যাচ্ছি একটি বড় সংখ্যা যাতে লুপ জন্য অধিক সংখ্যক বার পুনরুক্তি হবে. এই ক্ষেত্রে, আমি যাচ্ছি 11 এর একটি মান লিখুন. এখন আবার আমি সেট চাই কারণ লাইন 15 এ একটি বিরতি বিন্দু, এটা যে লাইন হাইলাইট করতে যাচ্ছে. আমরা দেখতে পারেন আমাদের সংখ্যা 11 সঠিকভাবে হয় আমাদের স্থানীয় ভেরিয়েবলের মধ্যে প্রতিনিধিত্ব. আমরা এখন যে ওভার পারেন পদবিন্যাস আমি আমাদের মান কি ঘড়ি আমরা লুপ জন্য এই ভেতরে এগিয়ে যাওয়া হিসেবে. এটা প্রত্যেক সময় আমরা মান বৃদ্ধি পায় লুপ জন্য যে শীর্ষে পৌঁছানোর. জিনিস এক এখন যে প্রতাপ সঞ্চালনের সময় করতে উপযোগী হতে এই প্রোগ্রামের আসলে আমার জন্য নয় দেখতে ভেরিয়েবল midstream পরিবর্তন কি আমার প্রোগ্রাম ঘটবে. এই ক্ষেত্রে, আমি আসলে যা করতে পারেন ডবল মান ক্লিক করুন. এটি একটি টেক্সট ক্ষেত্রের হয়ে যে লক্ষ্য করুন. এখন আমি বিভিন্ন লিখতে পারেন পুরাপুরি মূল্য আমার প্রোগ্রাম এর আচরণ কেমন হবে দেখতে আমি যে পরিবর্তনশীল পরিবর্তন করেছি. এখন এই ক্ষেত্রে, পরিবর্তনশীল আমি এখন মূল্য 10 রয়েছে. কিন্তু প্রোগ্রাম এখনও মৃত্যুদন্ড স্থগিত. আমি উপর সিঁড়ির ধাপ যখন, আমি দেখতে আমি 10 হিসাবে প্রবেশ যা মান আমি, , NUM মূল্য তার চেয়ে অনেক বেশী, যা অবিলম্বে লুপ জন্য কারণ নির্বাহ থামাতে. এখন শুধু নয় কারণ আপনি কেন হবে জায়গায় পরিবর্তনশীল পরিবর্তন করতে চান. আপনি আসলে চাইতে পারেন এটা তাই পরিবর্তন করতে চেষ্টা আপনি চালিয়ে যেতে পারেন যে একটি লুপ এর মৃত্যুদন্ড অথবা, যাতে আপনি পরিবর্তন করতে পারেন এটা আগে কিছু মান কিছু গাণিতিক নির্দিষ্ট সেট ছুঁয়েছে আপনি সম্পাদন করতে চলেছেন যে. তাই এখন আমরা আসলে পরিবর্তন করে প্রোগ্রাম হিসেবে তোমার মান, নির্বাহ করেন এটি লুপ জন্য প্রস্থান করার জন্য সৃষ্ট অকালে আমি হঠাৎ সব, কারণ মূল্য তার চেয়ে অনেক বেশী হতে ঘটেছে | NUM, লুপ জন্য যে, যার অর্থ আর মৃত্যুদন্ড কার্যকর করা প্রয়োজন. উপরন্তু, এটা হতে ঘটেছে আমরা তোমার মান পরিবর্তন যে ক্ষেত্রে লাইন 17 হাইলাইট ছিল যখন, সময় যা ছিল যে লুপ সঞ্চালনের জন্য আসলে মূল্যায়ন করা হয়েছিল. আমি মান পরিবর্তিত ছিল আমি একটি ভিন্ন লাইনে, 19 বলে আমরা বিভিন্ন দেখা হবে আচরণ লাইন 19 কারণ লুপ আগে মৃত্যুদন্ড কার্যকর করেছে শর্ত reevaluated হয়. এখন এই সময়ে, আমি আছি, আবার, এই প্রোগ্রাম শেষে. এবং আমি এই বিষয়েরই এগিয়ে যেতে অনুমতি দিতে পারে আমার প্রোগ্রাম স্বাভাবিকভাবেই প্রস্থান করার জন্য অনুমতি দেয়. কিন্তু জিনিষ কয়েক আছে দূরে নেওয়া গুরুত্বপূর্ণ হয় এই বিশেষ আলোচনা থেকে. আপনি মূল্যায়ন প্রয়োজন আপনার নিজের অনুমানের কিভাবে সম্পর্কে কোড ব্যবহারকে করা উচিত. কোন সময় আপনি কিছু টুকরা যে মনে আপনি জানেন কোড কাজ ঘটবে এর, যে যেতে একটি লাল পতাকা হতে পারে ফিরে এবং মূল্যায়ন, এবং নিশ্চিত করা আপনার ভাবনাটি হলো এই যে কিভাবে যে কোড অপারেটিং হয় কিভাবে এটা করতে আসলে সত্য আপনার সোর্স কোড প্রকাশ. কিন্তু বিন্দু আরও ছিল, আমরা ডিবাগার ব্যবহার করা হয় যখন, আপনি এ ব্রেকপয়েন্ট করা যাবে কোড বিভিন্ন লাইন, ডিবাগার হতে হবে, যা যারা লাইন প্রতিটি মৃত্যুদন্ড বিরতি তাই আপনি নির্ণয় করতে পারেন যে মেমরি বা এমনকি জায়গায় এটা পরিবর্তন. এবং আবার, আপনি করতে পারেন মনে রাখবেন একাধিক ব্রেকপয়েন্ট তৈরি যাতে আপনি এছাড়াও মৃত্যুদন্ড পুনরায় শুরু করতে পারেন, লাফালাফি কোড বৃহৎ অংশ ধরে, এবং এটি স্বয়ংক্রিয়ভাবে দ্বিধা করব পরবর্তী বিরতি সময়ে. আসলে আরো উন্নত নেই ডিবাগার বৈশিষ্ট্য, সেইসাথে. কিন্তু আমরা আপনাকে পড়ুন করতে হবে কিছু পরবর্তী ভিডিও সত্যিই কিভাবে সরাইয়া জ্বালাতন করার জন্য ঐ বিশেষ ফাংশন ব্যবহার করতে. এখন জন্য, আপনাকে ধন্যবাদ দেখার জন্য অনেক ধন্যবাদ. এবং সৌভাগ্য ডিবাগ.