1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> ডগ লয়েড: ঠিক আছে, GDB. 3 00:00:06,830 --> 00:00:08,480 এটা ঠিক কি হল? 4 00:00:08,480 --> 00:00:11,310 যা দাঁড়িয়েছে তাই GDB, গনু ডিবাগার জন্য, 5 00:00:11,310 --> 00:00:15,040 সত্যিই একটি ভয়ঙ্কর টুল যে আমরা করতে পারেন আমাদের প্রোগ্রাম ডিবাগ আমাদের সাহায্য করার জন্য ব্যবহার, 6 00:00:15,040 --> 00:00:18,210 অথবা কিছু জানতে যেখানে আমাদের প্রোগ্রাম যাচ্ছে ভুল. 7 00:00:18,210 --> 00:00:22,590 , GDB, amazingly শক্তিশালী কিন্তু এটি দিয়ে আউটপুট এবং মিথস্ক্রিয়া 8 00:00:22,590 --> 00:00:23,830 একটি সামান্য বিট রহস্যপূর্ণ হতে পারে. 9 00:00:23,830 --> 00:00:28,210 এটি সাধারণত একটি কমান্ড লাইন টুল, এবং আপনার বার্তা অনেক নিক্ষেপ করা যাবে. 10 00:00:28,210 --> 00:00:31,144 এবং এটা কোন ধরনের হার্ড পারেন ঘটছে ঠিক কি বিশ্লেষণ. 11 00:00:31,144 --> 00:00:33,560 সৌভাগ্যবশত, আমরা গ্রহণ করেছি ধাপ আপনার জন্য এই সমস্যাটি সমাধানের জন্য 12 00:00:33,560 --> 00:00:36,281 আপনি CS50 মাধ্যমে কাজ হিসেবে. 13 00:00:36,281 --> 00:00:39,030 আপনি গ্রাফিকাল ব্যবহার না করা হলে ডিবাগার, যা আমার সহকর্মী ড্যান 14 00:00:39,030 --> 00:00:41,570 Armandarse বেশ উচ্চারিত হয়েছে একটি ভিডিও সম্পর্কে একটি বিট যে 15 00:00:41,570 --> 00:00:44,740 এখানে উপর হতে হবে এই মুহূর্তে, আপনার প্রয়োজন হতে পারে 16 00:00:44,740 --> 00:00:48,270 কমান্ড লাইন থেকে ব্যবহার করার জন্য সরঞ্জাম সঙ্গে GDB কাজ করতে. 17 00:00:48,270 --> 00:00:51,250 আপনি CS50 মধ্যে কাজ করছি আইডিই, আপনি এই কাজ করতে হবে না. 18 00:00:51,250 --> 00:00:53,550 কিন্তু যদি আপনি না এবং CS50 IDE তে কাজ, 19 00:00:53,550 --> 00:00:55,750 সম্ভবত একটি সংস্করণ ব্যবহার CS50 অ্যাপ্লায়েন্স এর, 20 00:00:55,750 --> 00:00:58,860 বা অন্য লিনাক্স অপারেটিং GDB সঙ্গে সিস্টেম, এটি ইনস্টল 21 00:00:58,860 --> 00:01:00,980 আপনি ব্যবহার করার প্রয়োজন হতে পারে এই কমান্ড লাইন টুল. 22 00:01:00,980 --> 00:01:02,860 >> আর যেহেতু আপনি পারে এটা, যে কি আছে 23 00:01:02,860 --> 00:01:06,280 ঠিক কিভাবে বুঝতে দরকারী , GDB কমান্ড লাইন থেকে কাজ করে. 24 00:01:06,280 --> 00:01:09,650 কিন্তু আবার, যদি আপনি এবং CS50 IDE ব্যবহার করে, আপনি 25 00:01:09,650 --> 00:01:15,400 গ্রাফিক্যাল ডিবাগার ব্যবহার করতে পারেন যে আইডিই মধ্যে নির্মিত হয়. 26 00:01:15,400 --> 00:01:18,750 সুতরাং জিনিস সঙ্গে পেতে যাচ্ছে , GDB, ডিবাগিং শুরু করার 27 00:01:18,750 --> 00:01:21,220 একটি নির্দিষ্ট প্রক্রিয়া প্রোগ্রাম, সব আপনি কি প্রয়োজন 28 00:01:21,220 --> 00:01:23,810 , GDB অনুসরণ টাইপ করা হয় প্রোগ্রামের নাম দ্বারা. 29 00:01:23,810 --> 00:01:28,620 সুতরাং উদাহরণস্বরূপ, আপনার প্রোগ্রামটি যদি হ্যালো, আপনি GDB হ্যালো টাইপ করতে হবে. 30 00:01:28,620 --> 00:01:31,210 >> যখন আপনি না যে, আপনি যাচ্ছেন , GDB পরিবেশ টান. 31 00:01:31,210 --> 00:01:33,800 তোমার প্রম্পট পরিবর্তন, এবং হবে পরিবর্তে হচ্ছে সাধারণত কি এটা 32 00:01:33,800 --> 00:01:35,841 আপনি যদি কিছু লিখলেই হয় কমান্ড লাইনে LS এ, 33 00:01:35,841 --> 00:01:38,115 আপনার সাধারণত সব সিডি লিনাক্স, আপনার প্রম্পট কমান্ড 34 00:01:38,115 --> 00:01:42,200 সম্ভবত, কিছু পরিবর্তন করতে হবে বন্ধনীর মত, GDB বন্ধনী. 35 00:01:42,200 --> 00:01:46,630 যে কারণ, আপনার নতুন GDB প্রম্পট এর আপনি GDB পরিবেশ ভিতরে ঢুকে গেছে. 36 00:01:46,630 --> 00:01:49,830 একবার যে পরিবেশের ভিতরে, দুটি প্রধান কমান্ড আছে 37 00:01:49,830 --> 00:01:52,290 আপনি সম্ভবত ব্যবহার করব যে নিম্নলিখিত ক্রম অনুযায়ী. 38 00:01:52,290 --> 00:01:55,200 >> প্রথম বি, যা বিরতির জন্য ছোট. 39 00:01:55,200 --> 00:01:58,690 এবং আপনি বি, আপনি সাধারণত টাইপ পরে একটি ফাংশন এর নাম টাইপ করুন, 40 00:01:58,690 --> 00:02:01,040 অথবা আপনি জানেন যে ঘটতে যদি কি লাইন সংখ্যা প্রায় 41 00:02:01,040 --> 00:02:04,100 আপনার প্রোগ্রাম শুরু হয় একটু অদ্ভুত আচরণ, 42 00:02:04,100 --> 00:02:06,370 আপনি একটি লাইন টাইপ করতে পারেন সংখ্যা আছে পাশাপাশি. 43 00:02:06,370 --> 00:02:09,660 কি বি, বা বিরতি, আছে এটি আপনার প্রোগ্রাম পারবেন 44 00:02:09,660 --> 00:02:13,270 একটি নির্দিষ্ট সময় পর্যন্ত চালানোর, ফাংশন যথা, নাম 45 00:02:13,270 --> 00:02:15,880 আপনি উল্লেখ করুন অথবা লাইন যে আপনি নির্দিষ্ট করে সংখ্যা. 46 00:02:15,880 --> 00:02:18,590 >> এবং যে সময়ে, এটা মৃত্যুদন্ড বরফে পরিণত করা হবে. 47 00:02:18,590 --> 00:02:21,670 এই কারণ, সত্যিই একটি ভাল জিনিস মৃত্যুদন্ড নিথর হয়েছে একবার, 48 00:02:21,670 --> 00:02:25,214 আপনি খুব ধীরে ধীরে শুরু করতে পারেন আপনার প্রোগ্রামের মাধ্যমে পইঠা. 49 00:02:25,214 --> 00:02:28,130 আপনি চলেছি, সাধারণত, চলমান আপনার প্রোগ্রাম, তারা বেশ ছোট করছি. 50 00:02:28,130 --> 00:02:31,250 সাধারণত, আপনি বিন্দু টাইপ যাই হোক না কেন আপনার প্রোগ্রামের নাম, এন্টার হয় 51 00:02:31,250 --> 00:02:33,470 এবং আপনি নাচা যাবে আগে, আপনার প্রোগ্রাম ইতিমধ্যে সমাপ্ত হয়. 52 00:02:33,470 --> 00:02:36,620 এটা সত্যিই চেষ্টা অনেক সময় না এবং ভুল কি জিনিসটা. 53 00:02:36,620 --> 00:02:40,920 এটা সত্যিই কিছু মন্থর পাবে তাই নিচে B সঙ্গে একটি বিরতি বিন্দু সেট করে, 54 00:02:40,920 --> 00:02:43,040 এবং তারপর মধ্যে পদবিন্যাস. 55 00:02:43,040 --> 00:02:46,169 >> আপনি আপনার বিরতি সেট করেছি তারপরে বিন্দু, আপনি প্রোগ্রাম চালাতে পারেন. 56 00:02:46,169 --> 00:02:47,960 আর যদি আপনার কেউ থাকে কমান্ড লাইন আর্গুমেন্ট, 57 00:02:47,960 --> 00:02:51,610 আপনি, এখানে তাদের কিছু উল্লেখ না যখন আপনার প্রোগ্রামে সম্ভবত কিছু নাম, GDB টাইপ. 58 00:02:51,610 --> 00:02:55,980 আপনি সমস্ত কমান্ড লাইন উল্লেখ R, বা চালান গ্রহণ করে আর্গুমেন্ট, 59 00:02:55,980 --> 00:03:00,270 এবং তারপর যাই হোক না কেন কমান্ড লাইন আর্গুমেন্ট আপনি আপনার প্রোগ্রামের ভিতর প্রয়োজন. 60 00:03:00,270 --> 00:03:03,510 অন্যান্য একটি সংখ্যা সত্যিই আছে গুরুত্বপূর্ণ এবং দরকারী কমান্ড 61 00:03:03,510 --> 00:03:04,970 জিডিপি পরিবেশের ভিতরে. 62 00:03:04,970 --> 00:03:07,540 তাই শুধু দ্রুত আমাকে দিন তাদের কিছু পুনরালোচনা. 63 00:03:07,540 --> 00:03:11,320 >> প্রথম, পরের জন্য স্বল্প, যা এন, হয় এবং আপনি পরবর্তী পরিবর্তে এন টাইপ করতে পারেন 64 00:03:11,320 --> 00:03:12,304 উভয় কাজ করবে. 65 00:03:12,304 --> 00:03:13,470 আর এটা শুধু সাঁটে লেখার. 66 00:03:13,470 --> 00:03:17,540 এবং যদি আপনি ইতিমধ্যে সম্ভবত করেছি অর্জিত হিসাবে কিছু টাইপ করতে পারবে, এর ব্যবহার 67 00:03:17,540 --> 00:03:20,520 খাটো সাধারণত ভাল হয়. 68 00:03:20,520 --> 00:03:24,100 আর তা ঠিক করতে পারবো এটা করব কোড এগিয়ে এক ব্লক পদধ্বনি. 69 00:03:24,100 --> 00:03:26,170 সুতরাং এটি অগ্রসর হবে একটি ফাংশন কল পর্যন্ত. 70 00:03:26,170 --> 00:03:28,350 এবং তারপর পরিবর্তে যে ফাংশন মধ্যে ডাইভিং 71 00:03:28,350 --> 00:03:33,130 এবং যে ফাংশন সব দিয়ে যাচ্ছে কোড, এটা শুধু ফাংশন থাকবে. 72 00:03:33,130 --> 00:03:34,400 >> ফাংশন বলা হবে. 73 00:03:34,400 --> 00:03:35,733 এটা তার কাজ হল যাই হোক না কেন. 74 00:03:35,733 --> 00:03:38,870 এটি একটি মান ফিরে আসতে হবে এটা বলা যে ফাংশন. 75 00:03:38,870 --> 00:03:42,490 এবং তারপর আপনি উপর সরানো হবে কলিং ফাংশন এর পরের লাইনে. 76 00:03:42,490 --> 00:03:44,555 আপনি ধাপে করতে চান তাহলে ফাংশনের ভিতর, 77 00:03:44,555 --> 00:03:46,430 পরিবর্তে শুধু থাকার এটা বিশেষ করে, চালানো 78 00:03:46,430 --> 00:03:50,004 আপনি যদি মনে করেন যে সমস্যা যে ফাংশনের ভিতর থাকা পারে, 79 00:03:50,004 --> 00:03:52,670 আপনি, অবশ্যই, একটি বিরতি সেট করতে পারে ভিতরে যে ফাংশন বিন্দু. 80 00:03:52,670 --> 00:03:57,820 আপনি ইতিমধ্যে চালাচ্ছেন অথবা, যদি আপনি করতে পারেন কোড এগিয়ে এক লাইন পইঠা এর ব্যবহার. 81 00:03:57,820 --> 00:04:01,170 >> সুতরাং এই পইঠা হবে এবং ফাংশন মধ্যে ডুব, 82 00:04:01,170 --> 00:04:04,750 পরিবর্তে শুধুমাত্র চালানো আছে এবং ফাংশন উপর অব্যাহত 83 00:04:04,750 --> 00:04:07,380 আপনি ডিবাগিং জন্য করছি যে. 84 00:04:07,380 --> 00:04:09,870 আপনি কি জানতে চান একটি ভেরিয়েবলের মান, 85 00:04:09,870 --> 00:04:12,507 আপনি পি, বা প্রিন্ট টাইপ করতে পারেন, এবং তারপর পরিবর্তনশীল নামের. 86 00:04:12,507 --> 00:04:15,090 আর যে, তোমাদের কাছে প্রিন্ট আউট হবে , GDB পরিবেশের ভিতরে, 87 00:04:15,090 --> 00:04:19,110 পরিবর্তনশীল এর নাম, যে তোমাদেরকে ভগবন্ চলকের মান ছুতা 88 00:04:19,110 --> 00:04:20,064 আপনি নামকরণ করেছি যে. 89 00:04:20,064 --> 00:04:23,230 আপনি প্রতি মান জানতে চান যেখানে থেকে স্থানীয় পরিবর্তনশীল অ্যাক্সেসযোগ্য 90 00:04:23,230 --> 00:04:25,970 আপনি বর্তমানে আছে আপনার প্রোগ্রাম, আপনি তথ্য স্থানীয়দের টাইপ করতে পারেন. 91 00:04:25,970 --> 00:04:28,332 এটা তুলনায় অনেক দ্রুততর তারপর P টাইপ এবং যাই হোক না কেন, 92 00:04:28,332 --> 00:04:30,540 সব আউট তালিকা আপনি অস্তিত্ব জানি যে ভেরিয়েবল. 93 00:04:30,540 --> 00:04:34,370 আপনি তথ্য স্থানীয়দের টাইপ, এবং এটা করতে পারেন আপনার জন্য সবকিছু প্রিন্ট আউট হবে. 94 00:04:34,370 --> 00:04:37,770 পরবর্তী আপ, যা বিটি হয় ফিরে ট্রেস জন্য স্বল্প. 95 00:04:37,770 --> 00:04:41,680 এখন, সাধারণত, বিশেষ প্রথম CS50 মধ্যে, 96 00:04:41,680 --> 00:04:44,450 আপনি কি সত্যিই অনুষ্ঠানে থাকবে না বিটি, বা ফিরে ট্রেস ব্যবহার, 97 00:04:44,450 --> 00:04:47,860 আপনি ফাংশন হচ্ছে না, কারণ অন্য যে ফাংশন কল. 98 00:04:47,860 --> 00:04:50,450 >> আপনি প্রধান কল একটি থাকতে পারে ফাংশন, কিন্তু যে সম্ভবত এটি. 99 00:04:50,450 --> 00:04:53,199 আপনি যে অন্যান্য ফাংশন আছে না আরেকটি ফাংশন, কলিং যা 100 00:04:53,199 --> 00:04:54,880 আরেকটি ফাংশন কল, এবং তাই. 101 00:04:54,880 --> 00:04:57,550 কিন্তু আপনার প্রোগ্রাম আরো পেতে হিসাবে জটিল, এবং বিশেষ করে 102 00:04:57,550 --> 00:05:00,290 আপনি কাজ শুরু হলে recursion সঙ্গে, ফিরে ট্রেস 103 00:05:00,290 --> 00:05:05,150 আপনার দেওয়া একটি সত্যিই দরকারী উপায় হতে পারে ধরনের যেখানে কিছু প্রসঙ্গ পাবেন 104 00:05:05,150 --> 00:05:06,460 আমি আমার প্রোগ্রাম টা. 105 00:05:06,460 --> 00:05:10,590 সুতরাং আপনি আপনার কোড লিখিত করেছি বলে, ও আপনি প্রধান একটি ফাংশন কল যে জানেন 106 00:05:10,590 --> 00:05:14,720 একটি ফাংশন যা কল F, একটি ফাংশন এইচ কল যা গ্রাম. 107 00:05:14,720 --> 00:05:17,650 তাই আমরা বিভিন্ন স্তর আছে পাখির এখানে ঘটছে. 108 00:05:17,650 --> 00:05:19,440 >> আপনাকে ভিতরে করছি আপনার, GDB পরিবেশ, 109 00:05:19,440 --> 00:05:21,640 এবং আপনি আপনার ভিতরে জানি ঘঃ, কিন্তু তোমাকে ভুলে যাব 110 00:05:21,640 --> 00:05:27,210 আপনি যেখানে আপনি পেয়েছেন কি সম্পর্কে আপনি বিটি, বা ফিরে ট্রেস টাইপ করতে পারেন are--, 111 00:05:27,210 --> 00:05:32,370 এবং এটা, এইচ, জি আউট প্রধান চ প্রিন্ট করা হবে অন্য কিছু তথ্য, পাশাপাশি যা 112 00:05:32,370 --> 00:05:35,984 আপনি একটি খেই দেয় যে, ঠিক আছে প্রধান বলা চ, ছ বলা চ, ছ, জ বলা 113 00:05:35,984 --> 00:05:37,900 এবং যে যেখানে আমি বর্তমানে আমার প্রোগ্রাম টা. 114 00:05:37,900 --> 00:05:41,380 সুতরাং এটা সত্যিই দরকারী হতে পারে বিশেষ করে, GDB রহস্যপূর্ণ অন্তরীপ হিসাবে 115 00:05:41,380 --> 00:05:45,667 যাও, একটু অপ্রতিরোধ্য হয়ে কিছু ঠিক যেখানে খুঁজে বের করতে. 116 00:05:45,667 --> 00:05:48,500 অবশেষে, আপনার প্রোগ্রাম করা সম্ভব হলে, যখন আপনি কাজ করছেন বা এটি ডিবাগ 117 00:05:48,500 --> 00:05:50,125 এবং তুমি চুপ কর চান , GDB পরিবেশ থেকে, 118 00:05:50,125 --> 00:05:51,940 তা থেকে বেরিয়ে পেতে জানতে সাহায্য করে. 119 00:05:51,940 --> 00:05:55,500 আপনি প্রশ্ন টাইপ করুন, অথবা খুঁজে পেতে, প্রস্থান করতে পারেন. 120 00:05:55,500 --> 00:05:59,220 এখন, আজকের ভিডিও আগে আমি একটি বগী প্রোগ্রাম প্রস্তুত 121 00:05:59,220 --> 00:06:03,900 আমি কম্পাইল যা বলা buggy1, buggy1.c হিসাবে পরিচিত একটি ফাইল থেকে. 122 00:06:03,900 --> 00:06:06,500 আপনি, এই আশা করতে পারে প্রোগ্রাম আসলে বগী হয়. 123 00:06:06,500 --> 00:06:08,990 কিছু গোলমাল যখন আমি চেষ্টা এবং এটি চালানোর জন্য. 124 00:06:08,990 --> 00:06:13,014 এখন, দুর্ভাগ্যবশত, আমি অনবধানতাবশত আমার buggy1.c ফাইল মুছে ফেলা 125 00:06:13,014 --> 00:06:15,930 তাই যাতে আমার চিন্তা করার জন্য কি, এই প্রোগ্রামের সাথে ভুল করে যাচ্ছে 126 00:06:15,930 --> 00:06:18,770 আমি ব্যবহার করতে যাচ্ছি , GDB ধরনের অন্ধভাবে চেষ্টা 127 00:06:18,770 --> 00:06:22,372 এই প্রোগ্রামের মাধ্যমে নেভিগেট ভুল করে যাচ্ছে জিনিসটা ঠিক কি. 128 00:06:22,372 --> 00:06:24,580 কিন্তু শুধু টুলস ব্যবহার আমরা ইতিমধ্যে সম্পর্কে শিখেছি করেছি 129 00:06:24,580 --> 00:06:27,700 আমরা প্রায় কাছাকাছি চিন্তা করতে পারেন এটা ঠিক কি. 130 00:06:27,700 --> 00:06:30,740 সুতরাং আসুন ওভার আগাইয়া যাক এবং CS50 আইডিই এবং একটি চেহারা আছে. 131 00:06:30,740 --> 00:06:33,155 ঠিক আছে, তাই আমরা এখানে এসেছি আমার এবং CS50 আইডিই পরিবেশ, 132 00:06:33,155 --> 00:06:35,697 এবং আমি একটি সামান্য বিট জুম করব তাই আপনাকে একটু বেশি দেখতে পারেন. 133 00:06:35,697 --> 00:06:38,530 আমার টার্মিনাল উইন্ডোতে, আমি তালিকায় যদি আমার বর্তমান পরিচালক বিষয়বস্তু 134 00:06:38,530 --> 00:06:41,250 ls সঙ্গে, আমরা যে আমি দেখতে পাবেন সোর্স ফাইল একটি দম্পতি আছে 135 00:06:41,250 --> 00:06:44,982 এখানে, সহ পূর্বে buggy1 আলোচনা. 136 00:06:44,982 --> 00:06:46,940 কি ঠিক যখন যায় আমি চেষ্টা এবং buggy1 চালানো. 137 00:06:46,940 --> 00:06:47,773 ওয়েল এর খুঁজে বের করা যাক. 138 00:06:47,773 --> 00:06:52,510 আমি বিন্দু টাইপ বগী, এবং আমি লিখুন আঘাত. 139 00:06:52,510 --> 00:06:53,670 >> সেগমেন্টেশন ফল্ট. 140 00:06:53,670 --> 00:06:55,000 এটা ভালো না. 141 00:06:55,000 --> 00:06:57,180 আপনার যদি মনে থাকে, একটি সেগমেন্টেশন ফল্ট সাধারণত 142 00:06:57,180 --> 00:07:01,540 আমরা মেমরি অ্যাক্সেস যখন ঘটে আমরা স্পর্শ করতে অনুমতি দেওয়া হয় না যে. 143 00:07:01,540 --> 00:07:03,820 আমরা একরকম পৌঁছে গেছেন সীমার বাইরে 144 00:07:03,820 --> 00:07:05,995 কি প্রোগ্রাম, কম্পাইলার, আমাদের দেওয়া হয়েছে. 145 00:07:05,995 --> 00:07:08,310 তাই আগে থেকেই যে একটি খেই টুলবক্স রাখতে 146 00:07:08,310 --> 00:07:10,660 আমরা ডিবাগ প্রক্রিয়া শুরু. 147 00:07:10,660 --> 00:07:13,620 কিছু এখানে একটু ভুল গেছে. 148 00:07:13,620 --> 00:07:15,935 >> ঠিক আছে, তাই আসুন শুরু , GDB পরিবেশ আপ 149 00:07:15,935 --> 00:07:19,030 আমরা চিন্তা করতে পারেন এবং যদি দেখতে ঠিক কি সমস্যা হয়. 150 00:07:19,030 --> 00:07:21,674 আমি আমার পর্দা পরিষ্কার করা যাচ্ছে না এবং আমি GDB টাইপ করা যাচ্ছে না 151 00:07:21,674 --> 00:07:24,340 আবার, GDB পরিবেশে প্রবেশ করার জন্য, এবং প্রোগ্রামের নাম 152 00:07:24,340 --> 00:07:27,450 আমি buggy1 ডিবাগ করতে চান যে. 153 00:07:27,450 --> 00:07:30,182 আমরা পড়ার, একটু মেসেজ পাবেন buggy1 থেকে চিহ্ন, কাজ. 154 00:07:30,182 --> 00:07:32,390 এর মানে হল যে সকল এটি টানা হয় একসাথে সব কোড, 155 00:07:32,390 --> 00:07:35,570 এবং এখন সেটিকে লোড করা হয়েছে , GDB, এবং এটা যেতে প্রস্তুত. 156 00:07:35,570 --> 00:07:37,140 >> এখন, আমি কি করতে চান না? 157 00:07:37,140 --> 00:07:39,130 আপনি কি প্রত্যাহার না প্রথম ধাপে সাধারণত হয় 158 00:07:39,130 --> 00:07:42,540 আমি এই পরিবেশে এর ভিতর আছি পরে? 159 00:07:42,540 --> 00:07:44,540 আশা করছি, আপনি সেট বলেন একটি বিরতি বিন্দু, কারণ 160 00:07:44,540 --> 00:07:46,240 আসলে যে আমি কাজ করতে চান কি. 161 00:07:46,240 --> 00:07:47,990 এখন, আমি পারি না এই জন্য সোর্স কোড 162 00:07:47,990 --> 00:07:50,948 আমার সামনে, যা সম্ভবত হয় না টিপিক্যাল ব্যবহারের ক্ষেত্রে, উপায় দ্বারা. 163 00:07:50,948 --> 00:07:52,055 আপনি সম্ভবত না করবে. 164 00:07:52,055 --> 00:07:52,680 তাই ভালো. 165 00:07:52,680 --> 00:07:55,790 কিন্তু অভিমানী আপনি না, কি কি আপনি কি জানেন যে এক ফাংশন 166 00:07:55,790 --> 00:07:58,880 প্রতি একক সি প্রোগ্রাম বিদ্যমান? 167 00:07:58,880 --> 00:08:04,420 কোন ব্যাপার কিভাবে বড় বা কত জটিল এর মানে হল, এই ফাংশন স্পষ্টভাবে বিদ্যমান. 168 00:08:04,420 --> 00:08:05,440 মুখ্য, ডান? 169 00:08:05,440 --> 00:08:08,870 >> তাই অন্য সব, আমরা করতে পারেন ব্যর্থ প্রধান একটি বিভাজক পয়েন্ট সেট. 170 00:08:08,870 --> 00:08:12,200 এবং আবার, আমি শুধু টাইপ করতে পারে পরিবর্তে বি, প্রধান বিরতি. 171 00:08:12,200 --> 00:08:14,650 আর আপনি জানতে আগ্রহী হন তাহলে আপনি যদি কখনও একটি দীর্ঘ কমান্ড টাইপ আউট 172 00:08:14,650 --> 00:08:16,800 এবং তারপর আপনি বুঝতে পারি যে ভুল জিনিস টাইপ, 173 00:08:16,800 --> 00:08:18,770 এবং আপনি পরিত্রাণ পেতে চান সব আমি ঠিক করেনি, 174 00:08:18,770 --> 00:08:22,029 আপনি যা করবে, কন্ট্রোল ইউ নিতে পারেন সবকিছু মুছে দিন এবং আপনি ফিরিয়ে আনতে 175 00:08:22,029 --> 00:08:23,570 কার্সার লাইনের শুরুতে. 176 00:08:23,570 --> 00:08:26,569 শুধু চেপে ধরে তুলনায় অনেক দ্রুত মুছে ফেলা, বা এটি একটি গুচ্ছ বার আঘাত 177 00:08:26,569 --> 00:08:27,080 ওভার. 178 00:08:27,080 --> 00:08:28,740 >> সুতরাং আমরা প্রধান একটি বিভাজক পয়েন্ট সেট করব. 179 00:08:28,740 --> 00:08:32,970 আর আপনি দেখতে পারেন, এটা আমরা করেছি বলে ফাইল Buggy1.c এ ব্রেক পয়েন্ট সেট, 180 00:08:32,970 --> 00:08:36,330 এবং দৃশ্যত প্রথম লাইন প্রধান কোড লাইন সাত. 181 00:08:36,330 --> 00:08:38,080 আবার, আমরা আছে না এখানে সোর্স ফাইল, 182 00:08:38,080 --> 00:08:40,429 কিন্তু আমি এটা অনুমান করব আমার সত্য বলার. 183 00:08:40,429 --> 00:08:44,510 এবং তারপর, আমি শুধু চেষ্টা করছি এবং R, কর্মসূচি পরিচালনা করছে. 184 00:08:44,510 --> 00:08:45,360 প্রোগ্রাম শুরু. 185 00:08:45,360 --> 00:08:48,160 ঠিক আছে, তাই এই বার্তা একটু রহস্যপূর্ণ. 186 00:08:48,160 --> 00:08:50,160 কিন্তু মূলত কি এখানে ঘটছে তা ঠিক হয় 187 00:08:50,160 --> 00:08:53,350 আমি আমার বিরতি আঘাত করেছি আমাকে বলছে বিন্দু, বিরতি বিন্দু সংখ্যা 1. 188 00:08:53,350 --> 00:08:55,877 >> এবং তারপর, কোড যে লাইন, অনুরূপ কোন ফাইল বা ডিরেক্টরি নেই. 189 00:08:55,877 --> 00:08:57,710 একমাত্র কারণ যে আমি যে বার্তা এইজন্য করছি 190 00:08:57,710 --> 00:09:00,800 আমি অনবধানতাবশত কারণ আমার buggy.c ফাইল মুছে দিয়েছিলাম. 191 00:09:00,800 --> 00:09:04,050 আমার buggy1.c ফাইল অস্তিত্ব বর্তমান ডিরেক্টরির মধ্যে, 192 00:09:04,050 --> 00:09:06,920 সেখানে আসলে যে লাইন ডান আমাকে বলুন কি কোড লাইন 193 00:09:06,920 --> 00:09:08,214 আক্ষরিক সার্চ. 194 00:09:08,214 --> 00:09:09,380 দুর্ভাগ্যবশত, আমি এটা মুছে ফেলা. 195 00:09:09,380 --> 00:09:14,790 আমরা ধরনের নেভিগেট আছে চলুন আরো অন্ধভাবে এই একটু মাধ্যমে. 196 00:09:14,790 --> 00:09:17,330 >> ঠিক আছে, তাই এর দেখতে দিন, কি আমি এখানে কাজ করতে চান না? 197 00:09:17,330 --> 00:09:21,770 ওয়েল, আমি কি স্থানীয় জানতে চাই ভেরিয়েবল হয়তো আমাকে পাওয়া যায়. 198 00:09:21,770 --> 00:09:23,570 আমি আমার কর্মসূচি গ্রহণ করে থাকেন. 199 00:09:23,570 --> 00:09:28,515 এর হতে পারে তা দেখুন ইতিমধ্যে আমাদের জন্য সক্রিয়া. 200 00:09:28,515 --> 00:09:31,430 আমি তথ্য স্থানীয়দের, কোন স্থানীয়দের টাইপ. 201 00:09:31,430 --> 00:09:33,960 ঠিক আছে, যে না, তাই আমার তথ্য একটি টন দিতে. 202 00:09:33,960 --> 00:09:37,600 আমি চেষ্টা এবং একটি পরিবর্তনশীল প্রিন্ট আউট করতে পারে, কিন্তু আমি কোনো ভেরিয়েবলের নাম জানি না. 203 00:09:37,600 --> 00:09:39,930 আমি একটি চিহ্ণিত চেষ্টা করে দেখতে পারেন, কিন্তু আমি প্রধান ভেতরে আছি 204 00:09:39,930 --> 00:09:43,710 তাই আমি তৈরি করিনি জানেন এই মুহূর্তে অন্য ফাংশন কল. 205 00:09:43,710 --> 00:09:47,710 >> আমার একমাত্র বিকল্প মত তাই দেখায় এন বা তাই ব্যবহার এবং ঝাঁপিয়ে শুরু করার. 206 00:09:47,710 --> 00:09:49,630 আমি এন ব্যবহার করা যাচ্ছে না. 207 00:09:49,630 --> 00:09:51,180 তাই আমি এন টাইপ. 208 00:09:51,180 --> 00:09:53,060 আমার ভগবন্, কি এখানে যাচ্ছে. 209 00:09:53,060 --> 00:09:56,260 প্রোগ্রাম সংকেত পেয়েছি, SIGSEGV সেগমেন্টেশন ফল্ট, 210 00:09:56,260 --> 00:09:57,880 এবং তারপর স্টাফ আভা. 211 00:09:57,880 --> 00:09:58,880 আমি ইতিমধ্যে খুবই আনন্দিত. 212 00:09:58,880 --> 00:10:00,980 ওয়েল, আসলে আছে একটি অনেক শিখেছি এখানে করা. 213 00:10:00,980 --> 00:10:02,520 তাই আমরা কি দেখতে পাই না? 214 00:10:02,520 --> 00:10:09,180 এটা কি আমাদের বলে এই প্রোগ্রাম, হয় সম্পর্কে, কিন্তু এখনও না, seg দোষ. 215 00:10:09,180 --> 00:10:12,550 এবং বিশেষ করে, আমি যাচ্ছি এমনকি আরও এখানে জুম করতে, 216 00:10:12,550 --> 00:10:18,980 এটি সম্পর্কে seg ফল্ট সম্পর্কে কিছু strcmp বলা. 217 00:10:18,980 --> 00:10:22,705 >> এখন, আমরা আলোচনা করেছি না পারে ব্যাপকভাবে এই ফাংশন. 218 00:10:22,705 --> 00:10:25,580 আমরা যাচ্ছেন না, কারণ এটা হচ্ছে ÑÑ প্রতি ফাংশন সম্পর্কে কথা বলার জন্য যে 219 00:10:25,580 --> 00:10:28,610 সি মান বিদ্যমান লাইব্রেরি কিন্তু তারা, আপনি সমস্ত উপলব্ধ আছেন 220 00:10:28,610 --> 00:10:32,110 আপনি একটি নিতে, বিশেষ করে যদি reference.cs50.net তাকান. 221 00:10:32,110 --> 00:10:35,000 আর strcmp সত্যিই একটি শক্তিশালী হয় ভিতরে বিদ্যমান ফাংশন 222 00:10:35,000 --> 00:10:38,070 string.h হেডার একটি হেডার ফাইল, যা, 223 00:10:38,070 --> 00:10:41,970 ফাংশন নিবেদিত যে ফাইল সাথে যে কাজ এবং স্ট্রিং নিপূণভাবে. 224 00:10:41,970 --> 00:10:49,830 >> এবং বিশেষ করে, কি strcmp না হয় এটা দুই স্ট্রিং মান তুলনা করা হয়. 225 00:10:49,830 --> 00:10:54,160 তাই আমি দোষ সেগমেন্টেশন সম্পর্কে নই একটি কল উপর এটি মনে strcmp যাও. 226 00:10:54,160 --> 00:10:58,530 আমি এন আঘাত, এবং আসলে আমি মেসেজ পাবেন প্রোগ্রামের সংকেত SIGSEGV দিয়ে শেষ করা 227 00:10:58,530 --> 00:11:01,370 সেগমেন্টেশন ফল্ট. তাই এখন আমি আসলে seg faulted আছে, 228 00:11:01,370 --> 00:11:06,479 এবং আমার প্রোগ্রাম বেশ হয়েছে অনেক কার্যকরভাবে আপ দেওয়া. 229 00:11:06,479 --> 00:11:07,770 এই প্রোগ্রাম শেষে হয়. 230 00:11:07,770 --> 00:11:10,370 এটা ভেঙ্গে এটি বিধ্বস্ত হয়. 231 00:11:10,370 --> 00:11:14,740 তাই অনেক ছিল না, কিন্তু আমি আসলে বেশ একটু জানতে করেনি 232 00:11:14,740 --> 00:11:16,747 এই সামান্য অভিজ্ঞতা থেকে. 233 00:11:16,747 --> 00:11:17,580 আমি কি শিখেছি? 234 00:11:17,580 --> 00:11:22,020 ওয়েল, আমার প্রোগ্রাম বিপর্যস্ত অবিলম্বে প্রায় কাছাকাছি. 235 00:11:22,020 --> 00:11:26,300 আমার প্রোগ্রাম বিপর্যস্ত একটি strcmp কল, কিন্তু আমি 236 00:11:26,300 --> 00:11:30,560 যে কোন লোকাল ভেরিয়েবল আছে না আমার এটি বিপর্যস্ত যে সময়ে প্রোগ্রাম. 237 00:11:30,560 --> 00:11:37,320 তাই কি স্ট্রিং, বা স্ট্রিং, আমি সম্ভবত তুলনা হতে পারে. 238 00:11:37,320 --> 00:11:42,140 আমি কোনো স্থানীয় না থাকে ভেরিয়েবল, আপনি পারে 239 00:11:42,140 --> 00:11:45,520 হয়তো একটি হল আমি সেখানে থাকতে পারে অনুমান সত্য হতে পারে, যা বিশ্বব্যাপী পরিবর্তনশীল. 240 00:11:45,520 --> 00:11:47,670 >> কিন্তু সাধারণত, এটা মনে হয় আমি তুলনা করছি 241 00:11:47,670 --> 00:11:52,070 অস্তিত্ব নেই যে কিছু করার. 242 00:11:52,070 --> 00:11:54,130 সুতরাং আসুন তদন্ত দিন একটু আরও শর্ত থাকে যে. 243 00:11:54,130 --> 00:11:55,120 তাই আমি আমার পর্দা পরিষ্কার করা যাচ্ছে না. 244 00:11:55,120 --> 00:11:57,536 আমি আউট প্রস্থান করার জন্য যাচ্ছি একটি দ্বিতীয় জন্য, GDB পরিবেশ. 245 00:11:57,536 --> 00:12:01,300 এবং আমি ঠিক, চিন্তা করছি, তাই আছে আমার প্রোগ্রাম কোন স্থানীয় ভেরিয়েবল. 246 00:12:01,300 --> 00:12:06,444 আমি পাস করার কথা হয়তো আমি ভাবছি একটি কমান্ড লাইন আর্গুমেন্ট একটি পংক্তি. 247 00:12:06,444 --> 00:12:07,610 তাই আসুন শুধু এই পরীক্ষা করা যাক. 248 00:12:07,610 --> 00:12:09,020 আমি আগে এই কাজ করেন নি. 249 00:12:09,020 --> 00:12:14,244 >> আমি এই প্রোগ্রাম চালানো হতে পারে যদি এর দেখতে দিন একটি কমান্ড লাইন আর্গুমেন্ট সঙ্গে এটি কাজ করে. 250 00:12:14,244 --> 00:12:16,140 হাহ, সেখানে কোন সেগমেন্টেশন ফল্ট. 251 00:12:16,140 --> 00:12:17,870 এটা শুধু আমি এটা মূর্ত আউট যে আমাকে. 252 00:12:17,870 --> 00:12:19,170 তাই হয়তো যে ফিক্স এখানে. 253 00:12:19,170 --> 00:12:27,560 আমি ফিরে যান এবং যদি প্রকৃতপক্ষে, তাকান buggy1.c জন্য প্রকৃত সোর্স কোড, 254 00:12:27,560 --> 00:12:31,180 আমি কি করছি হিসাবে যদিও এটা মনে হয় আমি ছাড়া strcmp একটি কল তৈরি করছি 255 00:12:31,180 --> 00:12:34,010 আসলে argv [1] বিদ্যমান কিনা চেক. 256 00:12:34,010 --> 00:12:36,730 এই আসলে buggy1.c জন্য সোর্স কোড. 257 00:12:36,730 --> 00:12:38,855 তাই আমি সত্যিই প্রয়োজন কি আমার প্রোগ্রাম ঠিক এখানে না, 258 00:12:38,855 --> 00:12:40,835 অভিমানী আমি হয় আমার সামনে দায়ের 259 00:12:40,835 --> 00:12:44,740 শুধু করতে একটি চেক যোগ করতে নিশ্চিত যে argc 2 সমান. 260 00:12:44,740 --> 00:12:47,780 তাই এই উদাহরণস্বরূপ, আবার আমি বলেন, মত ঠিক আছে, একটু একটু কল্পিত হয়? 261 00:12:47,780 --> 00:12:49,840 আপনি সাধারণত যাচ্ছেন না ঘটনাক্রমে আপনার সোর্স কোড মুছে 262 00:12:49,840 --> 00:12:51,820 এবং তারপর চেষ্টা করতে হবে এবং প্রোগ্রাম ডিবাগ. 263 00:12:51,820 --> 00:12:53,120 কিন্তু আশা করছি, এটি দিয়েছে আপনি একটি চিত্রণ 264 00:12:53,120 --> 00:12:55,120 জিনিস ধরণের যে আপনি সম্পর্কে চিন্তা করা যেতে পারে 265 00:12:55,120 --> 00:12:56,610 হিসাবে আপনি আপনার প্রোগ্রাম ডিবাগ করছেন. 266 00:12:56,610 --> 00:12:58,760 >> এখানে বিষয়ক রাষ্ট্র কি? 267 00:12:58,760 --> 00:13:00,510 কি ভেরিয়েবল আমি কি আমার হাতে আছে? 268 00:13:00,510 --> 00:13:03,600 কোথায় ঠিক আমার প্রোগ্রাম কি লাইনে, বিপর্যয়, 269 00:13:03,600 --> 00:13:05,240 কি ফাংশন কি কল? 270 00:13:05,240 --> 00:13:06,952 দ্বার কি ধরনের যে আমাকে সুযোগ দেন? 271 00:13:06,952 --> 00:13:08,910 এবং যে ঠিক মুজিবনগর ধরনের যে আপনি 272 00:13:08,910 --> 00:13:12,820 আপনি যখন পেয়ে করা উচিত আপনার প্রোগ্রাম ডিবাগ সম্পর্কে চিন্তা. 273 00:13:12,820 --> 00:13:13,820 >> আমি ডগ লয়েড আছি. 274 00:13:13,820 --> 00:13:16,140 এটি CS50. 275 00:13:16,140 --> 00:15:08,642