[Powered by Google Translate] GDB, গনুহ প্রকল্প ডিবাগার, একটি শক্তিশালী সি জন্য ডিবাগ টুল, সহ অনেক ভাষা. এটা আপনি আপনার সি প্রোগ্রামের ভিতর থেকে প্রায় অকর্মা যখন তারা নির্বাহ করছেন করতে পারবেন, এবং এটি আপনাকে ঠিক কি আপনি দেখতে সুযোগ যখন আপনার প্রোগ্রাম বিপর্যস্ত. এটি বেশ ফিটফাট অধিকার,? GDB মুক্ত সফটওয়্যার, এবং এটি অনেক জনপ্রিয় UNIX-র উপর সঞ্চালিত হয় এবং উইন্ডোজ ভিত্তিক অপারেটিং সিস্টেম, তাই এটি একটি খুব ব্যাপক হাতিয়ার. আপনি এটি প্রেম শিখতে হবে. GDB অনুকূল একটি সহজ সময় আছে বাগ ট্র্যাকিং নিচে তুলনায় যারা অনুমান ব্যবহার মাধ্যমে যারা বিহ্বলতা এবং মুদ্রিত পৃষ্ঠা বিবৃতির অসীম পরিমাণে. GDB একটি কমান্ড লাইন টুল, যার মানে আপনি এটি দিয়ে টার্মিনালে যোগাযোগ করতে পারবেন আপনার মাউস দিয়ে কমান্ডের মাধ্যমে কীবোর্ড পরিবর্তে বাটন ক্লিক প্রদানকারী. যাও GDB শুরু আপ, আক্ষরিক আপনি শুধু প্রম্পট এ টাইপ করুন এবং আঘাত সময় gdb লিখুন. আপনি কিছু স্ক্রীন প্রিন্ট আউট লাইন দেখতে পাবেন দেখাচ্ছে GDB-র সংস্করণ আপনি যে আপনি চালাচ্ছেন, এর কপিরাইট তথ্য, এবং শেষে আপনি GDB প্রম্পট দেখতে পাবেন: (সময় gdb). এটি আপনি কি জানেন যে GDB আদেশের জন্য প্রস্তুত. এই মুহুর্তে সবচেয়ে গুরুত্বপূর্ণ জিনিস কিভাবে করবেন জানতে অব্যাহতিপ্রাপ্ত হয়. সৌভাগ্যবসত, এটা বেশ সহজ. প্রস্থান করার জন্য কমান্ড আছে শুধু যে. একটি শর্টকাট হিসাবে, আপনি শুধু ফ খুব ব্যবহার করতে পারেন. বুট GDB আপ এবং তারপর অবিলম্বে প্রস্থান হিসাবে হিসাবে মজা হয়, এর এখন যাক GDB একটি প্রোগ্রাম ডিবাগ সাহায্য ব্যবহার সম্পর্কে কথা বলুন. শুরু করার জন্য, আমি একটি প্রোগ্রাম এখানে factorial.c পেয়েছেন যে কোন int পায় এবং তার গৌণিক গনা করার প্রচেষ্টা করা হয়. ইন কেস আপনি আগে দেখা factorials না করে থাকেন অথবা আপনার তাদেরকে মনে না থাকে, সংখ্যা গৌণিক n হল সমান হবে পণ্য যাও - (n - 1), (n - 2), এবং তাই - যতক্ষন না আপনি 1 আঘাত. অতএব, 3 গৌণিক 3 * 2 * 1, অথবা 6, এবং 4 গৌণিক 4 * 3 * 2 * 1, বা 24. শূন্য এর গৌণিক একটি বিজোড় ক্ষেত্রে, এটা 1, এবং ঋণাত্মক পূর্ণসংখ্যা এর factorials সংজ্ঞায়িত না হয়. যাই হোক, আমার গৌণিক প্রোগ্রাম সম্পর্কে কিছু ভীতু. যখন আমি এটি চালানোর জন্য, সেটা ছাপে অদ্ভুত সংখ্যার যে factorials সাথে কোন সম্পর্ক নেই আউট. সুতরাং, আমরা কি চিন্তা করছেন সাহায্য GDB ব্যবহার করতে পারেন. GDB এক্সিকিউটেবল ফাইল পরিচালনা, যা বাইনারি সংকলন প্রক্রিয়া দ্বারা উত্পাদিত ফাইল. যে, আমরা আমাদের. গ GDB উপর সঞ্চালিত না বা. জ factorial.c ভালো উৎস কোড ফাইল পারেন. আমরা শুধু গৌণিক উপর পরিবর্তে এটি চালাতে চান. প্রোগ্রাম যদি কোনো কমান্ড লাইন আর্গুমেন্ট প্রয়োজন, এই যেখানে আমরা তাদের নির্দিষ্ট চাই. এই ক্ষেত্রে, গৌণিক কোনো কমান্ড লাইন আর্গুমেন্ট প্রয়োজন হয় না, তাই আমরা সংক্ষেপে রান বা r টাইপ করুন. এই গৌণিক চলমান প্রোগ্রাম আরম্ভ হবে. যখন প্রোগ্রাম স্টপ চলমান, আমি আমার GDB ফিরে প্রম্পট পাবেন. ঠিক আছে, আমি কি আবার একই জিনিস চেষ্টা, 4 গৌণিক. ঠিক আছে, আমরা দেখতে যে আমরা একই ধরনের আবর্জনা পেয়ে এখানে GDB মধ্যে করছেন. এখন যে প্রোগ্রাম সম্পন্ন হয়েছে, আমরা যান এবং তার অবস্থা কোন অ্যাক্সেস করতে পারেন, তাই আমরা আবার নির্বাহণের পূর্বে আমরা কি ঘটছে তা দেখতে পারেন আরম্ভ করার প্রয়োজন হবে. তবে, আমরা যখন এটা তার রান মাঝখানে এর থামাতে একটি উপায় প্রয়োজন. কি সেটা, আমরা কি একটি ব্যবহার ব্রেকপয়েন্ট এর নামে. ব্রেকপয়েন্ট একটি বিশেষ ফাংশন বা সোর্স কোড লাইনে প্রোগ্রাম বিরাম GDB বলুন যাতে আমরা প্রোগ্রাম রাষ্ট্র পরীক্ষা করতে পারেন, ভেরিয়েবলের মান, মেমরি এবং রাষ্ট্র যেমন, এ যে বিন্দু. যেহেতু আমি যেখানে কাজের ভুল হয়ে যাচ্ছে সত্যিই জানি না, আমি ডান খুব প্রারম্ভে ডিবাগ শুরু করতে চান, ডান যখন প্রধান আরম্ভ. আমরা প্রধান শুরুতে বিভাজক কমান্ড ব্যবহার করে একটি ব্রেকপয়েন্ট সেট করব. আমরা বো যাও সংক্ষিপ্ত বিরতি ব্যবহার করতে পারেন. এখন আমি কি প্রোগ্রাম আবার দৌড়. এখানে আমরা প্রধান প্রারম্ভে হয়, ঠিক মত GDB বলে আমাদের. কোড লাইন যে সম্পর্কে এর চালানো হয়েছে কিন্তু এখনো হয় printf লাইন. আমরা কোড এই লাইন এবং পরের লাইন চালানো যেতে GDB বলতে পারেন সঙ্গে পরের বা n কমান্ড. ঠিক এখন, GDB বলে আমরা GetInt লাইন করছি. আমি জানি যে এটা ভালো printf লাইন না চালানো হয়নি যেহেতু আমরা না দেখতে মুদ্রণ "একটি ধনাত্মক পূর্ণসংখ্যা লিখুন" পর্দায় আউট, কিন্তু আসলে এটি চালানো হয়নি. আমরা যা দেখছি তা হল অপারেটিং সিস্টেমের পর্দায় লেখা কিছু দমন করা একেবারে পর্যন্ত এটা করেছে, যা printouts সঙ্গে কেন ডিবাগ কখনও কখনও মনে অবিশ্বস্ত পারেন. যাই হোক, এর আবার দেওয়া কোড পরের লাইন এ যান এবং কোন int মধ্যে লিখুন. আবার, আসুন টাইপ 4. তাই এই অদ্ভুত দেখায়. আমরা লাইন 12 ভ্রমণরত যাও GDB অনুযায়ী, কিন্তু পরের লাইন যে এর চালানো সম্পর্কে শুধুমাত্র কোঁকড়া যুগল. যে শুধু মানে আমরা একটি লুপ শেষে করছি, আমাদের করতে সময় আসলে লুপ, এবং GDB কহন আমাদের হয় যে অবসান অবস্থায়, শূন্য তুলনায় যথা তথাপি, পরের চালানো হবে. যদি কখনও এই পায় একটু বিভ্রান্ত, আমরা তালিকা বা ঠ কমান্ডের সাহায্যে GDB উৎস কোড বৈঠাচালনা আপ করতে পারেন. এই ছাপে সোর্স কোড আউট যে লাইন আমরা বর্তমানে করছি এর চারপাশে কেন্দ্রীভূত. যদি আমরা তালিকা বা ঠ আবার টাইপ করুন, আমরা লাইন পরবর্তী সেট আউট মুদ্রণ দেখতে পাবেন. আমরা এই পর্যন্ত আমরা কি ফাইলের শেষে আঘাত করতে পারেন. যেখানে আমরা ফিরে পেতে, আমরা একটি লাইন নম্বর সহ তালিকা সরবরাহ করতে পারেন, এই ক্ষেত্রে, লাইন 12. যাই হোক, আসুন যান. এখন আমরা 4 লুপ করছি. চলুন শুরু করা যাক এরপর নিশ্চিত হোন যে আমাদের num ফাইলে পরিবর্তনশীল 4 রয়েছে. আমরা মুদ্রণ, বা পি, নিম্নলিখিত কমান্ডের সাহায্যে এই কাজ. সুতরাং, GDB বলে আমাদের যে প্রকৃতপক্ষে 4 num ফাইলে সংরক্ষণ করা হয়, হিসাবে আমরা প্রত্যাশিত. $ 1 যে GDB ছাপে আউট একটি বিশেষ GDB পরিবর্তনশীল এখন যে হয় 4 নম্বর হিসাবে ভাল সঞ্চয় সেট. আপনি এখন এই জন্য, কিন্তু উপেক্ষা করতে পারেন এই GDB ভেরিয়েবল সুপার আসা কুশলী এ ক্ষেত্রে আরো উন্নত যখন আপনি যা অতীতের সম্পন্ন করেছি প্রত্যাহার করতে চান. যাই হোক, পরের সঙ্গে চলন্ত উপর, আমরা দেখতে যে আমরা শুরু লুপ মাধ্যমে সরানোর জন্য. চলুন যাচ্ছে n বিট সঙ্গে মাধ্যমে এখানে বিট দ্বারা রাখা. বদলে টাইপ করা প্রতিটি সময়, এছাড়াও আপনি ঠিক করে এন্টার করতে পারেন. আপনি যখন কিছু টাইপ করে এন্টার ছাড়া, শুধু GDB পুনরাবৃত্ত পূর্ববর্তী কমান্ডের. তাই এখন আমরা printf কল আঘাত করেছেন. দেখে মনে হচ্ছে আমরা প্রকৃতপক্ষে আমাদের মাধ্যমে করেছি লুপ 4 বার জন্য চলে গেছে, যা কি আমরা যাও 1, 2, 3, এবং 4 দ্বারা গুণ করা যাতে করে যেতে চাই. সব দেখে মনে হচ্ছে এটি এর কাজ, যখন আমরা আঘাত পরের আবার ছাড়া আমরা এই বিপুল পরিবর্তে 24 নম্বর পেতে. যদি আমরা মুদ্রণ গৌণিক ব্যবহার করে পি মান আউট, আমরা দেখতে যে এটা এই গৌণিক বৃহদায়তন নম্বর আছে. স্পষ্টভাবে কিছু ভুল হতেই থাকবে. এই মুহূর্তে যদিও,, আমরা প্রায় প্রোগ্রাম শেষে হয়, এবং খুব দেরি কিছু স্থির করা. যাইহোক, আমরা আর টাইপ আবার এবং তারপর y টিপে নিশ্চিত প্রোগ্রাম পুনরায় আরম্ভ করতে পারেন. এখন আমরা আমাদের ব্রেকপয়েন্ট করেন প্রধান শুরুতে ফিরে. আমরা জানি যে সব যাও n মধ্যে পড়া সঙ্গে সূক্ষ্ম বলে মনে হয়. তাই আমরা n তিড়িং লাফ দিয়ে এগিয়ে যেতে পারে. পরিবর্তে, আমরা একটি নতুন ব্রেকপয়েন্ট সেট করতে পারেন পরে যখন লুপ এবং সেখানে তিড়িং লাফ. চলুন না যে. মনে হচ্ছে শুধু লুপ লাইন 14 পরে আসে. চলুন একটা ব্রেকপয়েন্ট সেট. এটা ভাল অনুশীলন এই ব্রেকপয়েন্ট কমান্ডের মধ্যে ফাইল নাম উল্লেখ যেহেতু GDB বিভ্রান্ত যদি আপনি একাধিক ফাইল সঙ্গে কাজ করছি করতে পারেন. এগিয়ে যাও এই ব্রেকপয়েন্ট সরানো, আমরা হলে continue করুন অথবা c কমান্ড ব্যবহার করব. ঠিক আছে এখানে, আমরা লুপ জন্য. এর মধ্যে লুপ জন্য আরও 1 টি লাইন যাওয়া যাক, এবং তারপর আমরা কি ঘটছে তা দেখতে মুদ্রণ ভেরিয়েবল শুরু করব. চলুন শুরু করা যাক, নিশ্চিত হয়ে নেবেন যে আমি সত্যিই 1, হিসাবে প্রত্যাশিত. হ্যাঁ, যে সব ভাল. কি সম্পর্কে গৌণিক যদিও? আরে, ভাল. আমরা একটি বড় ঋণাত্মক সংখ্যা করেছি এখানে পেয়েছিলাম. How'd যে ঘটবে? ওয়েল, যদি আমরা কোড ফিরে তাকান, আমরা যে আমরা এটি সক্রিয়া করা না, তাই আমরা ঠিক করেছি সেখানে আবর্জনা পেয়েছিলাম. যে স্পষ্টভাবে নিক্ষেপ আমাদের হিসাব বন্ধ করা. সৌভাগ্যবশত, আমরা GDB এই সমাধানের জন্য ত্যাগ করতে হবে না. আমরা এটি আরম্ভ করার অধিকার এখানে এবং কোড পরে print কমান্ড ব্যবহার করে এটা ঠিক করতে পারবো. আমরা এটি 1 থেকে শূন্য এবং 1 factorials উভয় 1 আরম্ভ করব, এবং যদি আমরা শূন্য এটি আরম্ভ করার পরে, আমরা শূন্য সঙ্গে সবসময় আমাদের ফলে শেষ পর্যন্ত চাই. আপনি কোন পরিবর্তনশীল এই পথ, যা সুপার কুশলী সেট করতে পারেন. এখন, এর জন্য আমাদের প্রোগ্রাম অবিরত. চলুন শুরু করা যাক নিশ্চিত হোন যে, সবকিছু যেখানে এটা অনুমিত এর. Num 4 হওয়া উচিত, আমি 1, হতে এবং গৌণিক 1 অত্যন্ত করা উচিত্. আমরা এই প্রক্রিয়া শর্টকাট এবং আমাদের স্থানীয় ভেরিয়েবল সব মুদ্রণ করতে পারেন সঙ্গে উপরি - সহায়ক কমান্ডের তথ্যকে স্থানীয়, যা ছাপে আমাদের মধ্যে-সুযোগ স্থানীয় ভেরিয়েবল সব আউট. যাইহোক, এটা দেখে মনে হচ্ছে সবকিছু এর যেতে ভাল. চলুন শুরু করা যাক অন্য লুপ এর যেতে-কাছাকাছি ঠিক নিশ্চিত করার জন্য না. ঠিক আছে, সবকিছু দেখতেও মহান. এখন আমরা শেষ যেতে হলে continue কমান্ড ব্যবহার করতে পারেন. মিষ্টি! 4 গৌণিক মুদ্রিত 24 আউট হিসাবে প্রত্যাশিত. এখন আমরা আমাদের কোড মধ্যে এই স্থির করা যেতে পারে. বরং GDB আউট করে প্রস্থান করার তুলনায়, আমরা এই কাজ করতে অন্য ট্যাবে টার্মিনাল ব্যবহার করব. আমাদের GDB ট্যাবে ফিরে যাওয়া, আমরা এখন আমাদের এক্সিকিউটেবল recompile প্রয়োজন. GDB সম্পর্কে ভাল জিনিস হল যে আপনি GDB করতে চালানো ত্যাগ করতে হবে না. যাতে আমরা পুরানো ব্রেকপয়েন্ট আঘাত না রাখা, যাক এর সাথে অক্ষম, আপনি ঠিকই অনুমান করেছিলেন, কমান্ড অক্ষম. এই আমাদের ব্রেকপয়েন্ট সব নিষ্ক্রিয় করা হবে. এখন, আমরা আর সঙ্গে প্রোগ্রাম পুনরায় আরম্ভ করুন এবং নিশ্চিত করুন সবকিছু ঠিক করতে পারেন. দেখে মনে হচ্ছে সবকিছু এর যেতে ভাল. ঠিক 24 4 টি প্রিন্ট আউট এর গুণিতক, আমরা ভেবেছিলাম. GDB সবচেয়ে সহায়ক সরঞ্জামগুলি আপনি আপনার টুলবাক্স মধ্যে পেয়েছেন এক. একটি টন আপনার আরো অনেক GDB সঙ্গে করতে পারেন, বেশী বেশী আপনি সহজ printouts করতে পারেন. পরবর্তী সময় কি আপনি চান আপনার প্রোগ্রাম করছে না, যাও জিনিসটা কি ভিতরে যাচ্ছে GDB চালানোর চেষ্টা. একটি অনুশীলন সামান্য বিট সঙ্গে, আপনি সরাসরি আপনার বাগ কোন সময় কসরত ডাউন করতে পারবেন. আমার নাম Nate Hardison. এটি CS50.