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 شگفت آور قدرتمند است، اما خروجی و تعامل با آن 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 IDE، شما لازم نیست که برای انجام این کار. 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 اما باز هم، اگر شما با استفاده از IDE CS50، شما 25 00:01:09,650 --> 00:01:15,400 می توانید دیباگر گرافیکی استفاده است که به IDE ساخته شده است. 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 line-- فرمان، 33 00:01:35,841 --> 00:01:38,115 cd-- همه معمولی خود را دستورات لینوکس، سریع شما 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 >> اولین B، که کوتاه برای استراحت است. 39 00:01:55,200 --> 00:01:58,690 و بعد از شما B تایپ می کنید، شما به طور معمول نوع نام از یک تابع، 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 >> به N، که کوتاه است برای آینده است، و شما می توانید نوع به جای بعدی N، 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 شما می توانید نوع P، و یا چاپ، و سپس نام متغیر. 86 00:04:12,507 --> 00:04:15,090 و است که به شما نسخه قابل چاپ، در داخل محیط GDB، 87 00:04:15,090 --> 00:04:19,110 نام متغیر، که you-- بهانه مقدار متغیر me-- 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 بعد تا BT، است که کوتاه را برای برگشت ردیابی. 95 00:04:37,770 --> 00:04:41,680 در حال حاضر، به طور کلی، به خصوص در اوایل CS50، 96 00:04:41,680 --> 00:04:44,450 شما نمی خواهد واقعا مناسبت داشته به استفاده از BT، و یا بازگشت ردیابی، 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 زمانی که شما شروع به کار با بازگشت، ردیابی 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-- شما می توانید BT، و یا ردیابی نوع، 111 00:05:27,210 --> 00:05:32,370 و آن را به خارج ساعت، G چاپ، F اصلی، در کنار برخی از اطلاعات دیگر، که 112 00:05:32,370 --> 00:05:35,984 به شما می دهد یک سرنخ است که، OK اصلی به نام F، F G به نام، G به نام ساعت، 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 IDE و یک نگاه. 131 00:06:30,740 --> 00:06:33,155 خوب، پس ما در اینجا در حال من CS50 محیط IDE، 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 در هر برنامه واحد C وجود دارد؟ 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 شما می توانید کنترل U را، که حذف همه چیز و شما را 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 >> بنابراین به نظر می رسد تنها گزینه من به استفاده از N و یا پس و شروع به شیرجه رفتن در. 206 00:09:47,710 --> 00:09:49,630 من قصد دارم به استفاده از n. 207 00:09:49,630 --> 00:09:51,180 بنابراین من نوع N. 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 اما is-- چرا که ما در حال رفتن به بحث در مورد هر تابع که 219 00:10:25,580 --> 00:10:28,610 در استاندارد C وجود دارد library-- اما همه آنها به شما در دسترس است، 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 من ضربه N، و در واقع این پیام دریافت می کنم، برنامه خاتمه با SIGSEGV سیگنال 227 00:10:58,530 --> 00:11:01,370 گسل تقسیم بندی. بنابراین در حال حاضر من در واقع SEG انتقاد، 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 حدس زد که من have-- وجود دارد شاید یک متغیر جهانی، که می تواند درست باشد. 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 و من فکر، OK، بنابراین وجود دارد هیچ متغیرهای محلی در برنامه من است. 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 به فقط اضافه کردن یک چک کنید تا مطمئن مطمئن شوید که تعداد آنها برابر با 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