1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> DOUG لويد: جميع الحقوق GDB. 3 00:00:06,830 --> 00:00:08,480 ما هو بالضبط؟ 4 00:00:08,480 --> 00:00:11,310 حتى GDB، والتي تقف لالمصحح GNU، 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 ولكن إذا كنت لا العمل في IDE CS50، 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 عندما كنت اكتب اشياء في ليرة سورية 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 >> الأول هو ب، التي قصيرة لقضاء عطلة. 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 لذلك حقا لتكون قادرة على إبطاء الامور إلى أسفل عن طريق وضع نقطة فاصل مع ب، 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 تحديد كافة سطر الأوامر الحجج من خلال اتخاذ ص، أو تشغيل، 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 اسم المتغير، أن 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 انها أسرع بكثير من كتابة ص ثم أيا كان، 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 لن يكون لديك حقا مناسبة لاستخدام 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 و مما يستدعي وظيفة ز، الذي يدعو وظيفة ساعة. 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 وسوف تطبع ح، ز، و الرئيسية، جنبا إلى جنب مع بعض المعلومات الأخرى التي 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 IDE وننظر لها. 131 00:06:30,740 --> 00:06:33,155 OK، لذلك نحن هنا في بلدي 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 مع ليرة سورية، وسنرى أن أكون لدينا اثنين من الملفات المصدر 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 وبعد ذلك، أنا فقط أحاول وتشغيل البرنامج، ص. 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 ما يخبرنا هو، وهذا البرنامج هو على وشك، ولكن لم يحدث ذلك، خطأ ثوانى. 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 أنا ضربت ن، في واقع الأمر أحصل على الرسالة، برنامج إنهاء إشارة SIGSEGV 227 00:10:58,530 --> 00:11:01,370 خطأ تجزئة. وحتى الآن أنا فعلا قد انتقد ثوانى، 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 لإضافة مجرد الاختيار لجعل تأكد من أن 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