1 00:00:07,170 --> 00:00:12,630 [Powered by Google Translate] GDB، ومشروع جنو المصحح، هو أداة قوية لتصحيح C، 2 00:00:12,630 --> 00:00:14,300 جنبا إلى جنب مع العديد من اللغات الأخرى. 3 00:00:14,300 --> 00:00:17,440 انها تسمح لك لكزة حول البرامج داخل C الخاص بك في حين انهم المنفذة، 4 00:00:17,440 --> 00:00:20,880 ويعطي لك الفرصة أيضا لمعرفة ما يحدث بالضبط 5 00:00:20,880 --> 00:00:22,490 عندما تعطل البرنامج. 6 00:00:22,490 --> 00:00:24,690 انها أنيق جدا، أليس كذلك؟ 7 00:00:24,690 --> 00:00:27,980 GDB هي البرمجيات الحرة، وأنه يعمل على UNIX وشعبية كثيرة 8 00:00:27,980 --> 00:00:31,840 أنظمة التشغيل المستندة إلى Windows، لذلك فمن أداة على نطاق واسع جدا. 9 00:00:31,840 --> 00:00:33,560 >> ينبغي أن تتعلم أن تحب ذلك. 10 00:00:33,560 --> 00:00:36,800 الايجابيات GDB وقتا أسهل بكثير تعقب البق 11 00:00:36,800 --> 00:00:39,150 من أولئك الذين تدبر أمرها من خلال استخدام التخمينات 12 00:00:39,150 --> 00:00:41,420 وكميات لا نهائية من البيانات المطبوعة. 13 00:00:41,420 --> 00:00:45,810 GDB هو أداة سطر الأوامر، مما يعني أنك يمكن أن تتفاعل معها في محطة 14 00:00:45,810 --> 00:00:49,720 إصدار الأوامر عن طريق لوحة المفاتيح بدلا من الأزرار النقر بالماوس. 15 00:00:49,720 --> 00:00:54,960 >> لبدء GDB، كنت حرفيا فقط نوع جدب في موجه وتصل إلى تدخل. 16 00:00:54,960 --> 00:00:58,230 سترى بعض خطوط تطبع على الشاشة 17 00:00:58,230 --> 00:01:00,810 يظهر لك إصدار GDB التي تقوم بتشغيل، 18 00:01:00,810 --> 00:01:07,890 المعلومات حق المؤلف، وعند نهاية سترى موجه GDB: (GDB). 19 00:01:07,890 --> 00:01:10,770 هذا يتيح لك معرفة أن GDB مستعد لأوامر. 20 00:01:10,770 --> 00:01:15,400 في هذه النقطة، يتم إنهاء أهم شيء أن تعرف كيفية القيام به. 21 00:01:15,400 --> 00:01:17,790 لحسن الحظ، وهذا هو بسيط جدا. 22 00:01:17,790 --> 00:01:19,840 الأمر إنهاء يفعل ذلك بالضبط. 23 00:01:19,840 --> 00:01:23,090 كاختصار، يمكنك فقط استخدام س أيضا. 24 00:01:23,090 --> 00:01:27,410 ممتعا بقدر تمهيد GDB والإقلاع عنه فورا ثم هو، 25 00:01:27,410 --> 00:01:30,800 دعونا الآن نتحدث عن استخدام GDB للمساعدة في تصحيح البرنامج. 26 00:01:30,800 --> 00:01:34,630 >> للبدء، لقد حصلت على البرنامج هنا في factorial.c 27 00:01:34,630 --> 00:01:37,380 أن يحصل على الباحث ويحاول لحساب مضروب به. 28 00:01:37,380 --> 00:01:41,270 في حال كنت لم أر factorials قبل أو لا تذكرها، 29 00:01:41,270 --> 00:01:47,840 مضروب العدد n يساوي نتاج ن - (ن - 1) و (ن - 2)، وهلم جرا - 30 00:01:47,840 --> 00:01:49,230 حتى تصل إليك 1. 31 00:01:49,230 --> 00:01:54,550 ولذلك، فإن مضروب 3 هو 3 * 2 * 1 أو 6، 32 00:01:54,550 --> 00:02:00,180 ومضروب 4 هو 4 * 3 * 2 * 1، أو 24. 33 00:02:00,180 --> 00:02:03,970 مضروب الصفر هو حالة غريبة، فمن 1، 34 00:02:03,970 --> 00:02:06,970 ولا يعرف factorials من الأعداد الصحيحة السالبة. 35 00:02:06,970 --> 00:02:10,280 على أي حال، شيئا عن برنامجي مضروب هو غير تقليدي. 36 00:02:10,280 --> 00:02:15,410 عندما كنت تشغيله، فإنه يطبع ارقام غريبة أن لا علاقة لها مع factorials. 37 00:02:15,410 --> 00:02:19,030 >> لذلك، يمكننا استخدام GDB للمساعدة في معرفة ما يجري. 38 00:02:19,030 --> 00:02:21,720 GDB تعمل على الملفات القابلة للتنفيذ، 39 00:02:21,720 --> 00:02:24,910 والتي هي ملفات ثنائية التي تنتجها عملية التجميع. 40 00:02:24,910 --> 00:02:30,940 وهذا هو، لا يمكننا تشغيل GDB على ج. لدينا أو ملفات التعليمات البرمجية المصدر مثل ح factorial.c. 41 00:02:30,940 --> 00:02:34,650 نحن نريد لتشغيله على مضروب فقط بدلا من ذلك. 42 00:02:34,650 --> 00:02:38,340 إذا لزم الأمر البرنامج أية وسائط سطر الأوامر، 43 00:02:38,340 --> 00:02:40,230 هذا هو المكان الذي كنا تحديدها. 44 00:02:40,230 --> 00:02:44,050 في هذه الحالة، مضروب لا تتطلب أي سائط سطر الأوامر، 45 00:02:44,050 --> 00:02:46,410 لذلك نحن فقط اكتب المدى أو r لفترة قصيرة. 46 00:02:46,410 --> 00:02:50,440 >> سيبدأ هذا مضروب تشغيل البرنامج. 47 00:02:50,440 --> 00:02:53,940 عندما يتوقف البرنامج عن التشغيل، سأحضر GDB بلدي يدفع الى الوراء. 48 00:02:53,940 --> 00:02:58,130 حسنا، دعونا نحاول نفس الشيء مرة أخرى، مضروب 4. 49 00:02:58,130 --> 00:03:02,910 كل الحق، ونحن نرى أننا الحصول على نفس النوع من القمامة هنا في GDB. 50 00:03:02,910 --> 00:03:04,850 والآن بعد انتهاء البرنامج، 51 00:03:04,850 --> 00:03:06,870 لا يمكننا الدخول والوصول إلى أي من حالته، 52 00:03:06,870 --> 00:03:09,870 وهكذا لن نحتاج لبدء تشغيله مرة أخرى قبل أن نتمكن من رؤية ما يحدث. 53 00:03:09,870 --> 00:03:13,570 ومع ذلك، فإننا بحاجة إلى وسيلة لوقفها في حين انها في منتصف مساره. 54 00:03:13,570 --> 00:03:16,970 >> للقيام بذلك، ونحن نستخدم ما يسمى نقطة توقف. 55 00:03:16,970 --> 00:03:21,880 نقاط التوقف اقول GDB لإيقاف البرنامج في وظيفة معينة أو مصدر سطر التعليمات البرمجية 56 00:03:21,880 --> 00:03:24,070 حتى نتمكن من فحص حالة البرنامج، 57 00:03:24,070 --> 00:03:27,380 قيم المتغيرات، وحالة الذاكرة وكذا، في تلك المرحلة. 58 00:03:27,380 --> 00:03:30,750 بما أنني لا أعرف حقا أين تسير الامور الخاطئة، 59 00:03:30,750 --> 00:03:33,510 >> أريد فقط أن بدء التصحيح المناسب في البداية، 60 00:03:33,510 --> 00:03:36,510 عندما يبدأ الحق الرئيسي. 61 00:03:36,510 --> 00:03:39,260 سنقوم تعيين نقطة توقف في بداية الرئيسي باستخدام الأمر الشوط الاول. 62 00:03:39,260 --> 00:03:42,640 يمكننا أيضا استخدام اختصار لب الشوط الاول. 63 00:03:42,640 --> 00:03:45,000 الآن دعونا بدء تشغيل البرنامج مرة أخرى. 64 00:03:45,000 --> 00:03:48,140 نحن هنا في بداية الرئيسي، مثلما يخبرنا GDB. 65 00:03:48,140 --> 00:03:51,970 السطر من التعليمات البرمجية التي على وشك تنفيذ ولكن هذا لم يحدث بعد 66 00:03:51,970 --> 00:03:53,480 هو خط printf. 67 00:03:53,480 --> 00:03:57,200 يمكن أن نقول GDB لتنفيذ هذا السطر من التعليمات البرمجية وتذهب إلى السطر التالي 68 00:03:57,200 --> 00:03:59,840 مع الأمر التالي أو ن. 69 00:03:59,840 --> 00:04:04,120 >> حسنا، الآن GDB يخبرنا أننا على خط GetInt. 70 00:04:04,120 --> 00:04:06,630 وأنا أعلم أنه يبدو وكأنه خط printf لم يتم تشغيل 71 00:04:06,630 --> 00:04:10,070 لأننا لا نرى "أدخل عدد صحيح إيجابية" الطباعة على الشاشة، 72 00:04:10,070 --> 00:04:12,040 إلا أنها في الواقع تشغيل. 73 00:04:12,040 --> 00:04:16,029 ما نراه هو نظام التشغيل قمع أي شيء الكتابة إلى الشاشة 74 00:04:16,029 --> 00:04:19,649 حتى على الإطلاق ل، التي لماذا التصحيح مع المطبوعات 75 00:04:19,649 --> 00:04:21,730 يمكن أن يبدو في بعض الأحيان لا يمكن الاعتماد عليها. 76 00:04:21,730 --> 00:04:26,240 على أي حال، دعونا مرة أخرى تذهب إلى السطر التالي من التعليمات البرمجية وأدخل في كثافة العمليات. 77 00:04:26,240 --> 00:04:30,070 مرة أخرى، دعونا اكتب 4. 78 00:04:30,070 --> 00:04:34,540 ولذلك فإن هذا يبدو غريبا. نحن في السطر 12 وفقا لGDB، 79 00:04:34,540 --> 00:04:37,660 ولكن السطر التالي وهذا على وشك تنفيذ هو مجرد متعرج. 80 00:04:37,660 --> 00:04:42,110 >> هذا يعني فقط أننا في نهاية حلقة، ونحن نفعل حين حلقة في الواقع، 81 00:04:42,110 --> 00:04:46,710 وGDB يقول لنا أن حالة الإنهاء، وهي لا شيء أقل من الصفر، 82 00:04:46,710 --> 00:04:48,010 سيتم تنفيذ المقبل. 83 00:04:48,010 --> 00:04:50,230 إذا كانت هذه يحصل أي وقت مضى قليلا مربكة، 84 00:04:50,230 --> 00:04:54,860 يمكننا سحب ما يصل إلى التعليمات البرمجية المصدر في GDB مع قائمة أو أمر لتر. 85 00:04:54,860 --> 00:04:56,880 هذا بطباعة شفرة المصدر 86 00:04:56,880 --> 00:04:59,010 انها تركزت حول أن الخط الذي نحن حاليا. 87 00:04:59,010 --> 00:05:03,590 إذا كان لنا أن اكتب قائمة أو ل مرة أخرى، وسنرى المجموعة التالية من خطوط طباعة. 88 00:05:03,590 --> 00:05:06,070 يمكننا أن نفعل هذا حتى أننا بلغ نهاية الملف. 89 00:05:06,070 --> 00:05:11,210 >> لنعود إلى حيث كنا، ويمكننا ان نورد قائمة مع عدد الخط، 90 00:05:11,210 --> 00:05:14,120 في هذه الحالة، السطر 12. 91 00:05:14,120 --> 00:05:16,040 على أي حال، دعونا نمضي قدما. 92 00:05:16,040 --> 00:05:18,240 الآن نحن على حلقة 4. 93 00:05:18,240 --> 00:05:21,490 دعونا نتأكد من أن لدينا متغير يحتوي على 4 الأسطوانات. 94 00:05:21,490 --> 00:05:26,170 ونحن نفعل ذلك مع الطباعة، أو P، الأوامر. 95 00:05:26,170 --> 00:05:31,140 لذلك، GDB يخبرنا بأن يتم تخزين الأسطوانات في الواقع 4، كما كنا نتوقع. 96 00:05:31,140 --> 00:05:35,180 1 أن مبلغ ال GDB يطبع خارج متغير GDB الخاص 97 00:05:35,180 --> 00:05:37,720 ومن المقرر الآن أن لتخزين 4 عدد كذلك. 98 00:05:37,720 --> 00:05:42,240 يمكنك تجاهل هذا الآن، ولكن هذه المتغيرات تأتي في GDB السوبر يدوية 99 00:05:42,240 --> 00:05:46,380 في الحالات الأكثر تقدما عندما تريد أن أذكر ما قمت به في الماضي. 100 00:05:46,380 --> 00:05:50,970 على أية حال، مع الانتقال المقبل، ونحن نرى أن نبدأ التحرك من خلال لحلقة. 101 00:05:50,970 --> 00:05:54,790 دعونا نمضي من هنا مع بت ن فشيئا. 102 00:05:54,790 --> 00:05:58,280 بدلا من الكتابة في كل مرة ن، يمكنك أيضا اضغط على زر الإدخال. 103 00:05:58,280 --> 00:06:03,710 عندما ضرب الدخول دون كتابة أي شيء، فقط GDB يكرر الأمر السابق. 104 00:06:03,710 --> 00:06:05,910 الآن حتى لقد ضرب لنا الدعوة printf. 105 00:06:05,910 --> 00:06:09,520 يبدو أننا قد ذهبت بالفعل من خلال لدينا حلقة 4 مرات، 106 00:06:09,520 --> 00:06:13,750 وهو ما نريد أن نفعله من أجل مضاعفة بنسبة 1، 2، 3، و 4. 107 00:06:13,750 --> 00:06:15,870 >> كل شيء يبدو أنه يعمل، 108 00:06:15,870 --> 00:06:19,680 إلا أننا عندما ضرب مرة أخرى المقبل نحصل على هذا الكم الهائل بدلا من 24. 109 00:06:19,680 --> 00:06:23,100 إذا كنا طباعة قيمة مضروب ع الخاص، 110 00:06:23,100 --> 00:06:26,120 ونحن نرى أن هذا مضروب لديها عدد هائل فيه. 111 00:06:26,120 --> 00:06:28,740 بالتأكيد شيئا ما يحدث خطأ. 112 00:06:28,740 --> 00:06:31,960 في هذه المرحلة، على الرغم من أننا تقريبا في نهاية البرنامج، 113 00:06:31,960 --> 00:06:34,610 وفوات الاوان لإصلاح أي شيء. 114 00:06:34,610 --> 00:06:39,750 >> ومع ذلك، لا يمكننا إعادة تشغيل البرنامج مرة أخرى عن طريق كتابة R ثم Y للتأكيد. 115 00:06:39,750 --> 00:06:43,460 الآن عدنا إلى نقطة توقف لدينا في بداية الرئيسي. 116 00:06:43,460 --> 00:06:46,600 ونحن نعلم أن كل شيء يبدو على ما يرام مع القراءة في ن. 117 00:06:46,600 --> 00:06:48,630 حتى نتمكن من القفز إلى الأمام مع ن. 118 00:06:48,630 --> 00:06:52,280 بدلا من ذلك، يمكننا تعيين نقطة توقف جديدة بعد القيام بينما حلقة 119 00:06:52,280 --> 00:06:54,910 والقفز هناك. دعونا نفعل ذلك. 120 00:06:54,910 --> 00:06:59,080 يبدو السطر 14 يأتي بعد الحلقة. 121 00:06:59,080 --> 00:07:01,070 دعونا تعيين نقطة توقف هناك. 122 00:07:01,070 --> 00:07:05,220 انها ممارسة جيدة لتحديد اسم الملف في هذا الأمر نقطة توقف 123 00:07:05,220 --> 00:07:08,480 يمكن الحصول على الخلط منذ GDB إذا كنت تعمل مع ملفات متعددة. 124 00:07:08,480 --> 00:07:13,230 للمضي قدما في هذا توقف، سوف نستخدم الأمر متابعة أو ج. 125 00:07:13,230 --> 00:07:16,570 >> حسنا، نحن هنا في لحلقة. 126 00:07:16,570 --> 00:07:19,060 دعونا نذهب خط 1 أكثر في لحلقة، 127 00:07:19,060 --> 00:07:21,630 وبعد ذلك سوف نبدأ الطباعة المتغيرات لمعرفة ما يجري. 128 00:07:21,630 --> 00:07:26,410 دعونا نتأكد من أن كنت حقا 1، كما هو متوقع. 129 00:07:26,410 --> 00:07:28,300 نعم، كل هذا جيد. 130 00:07:28,300 --> 00:07:30,270 ما مضروب حول على الرغم من؟ 131 00:07:30,270 --> 00:07:33,760 قف، وهذا ليس جيدا. 132 00:07:33,760 --> 00:07:35,800 لدينا عدد كبير السلبية هنا. 133 00:07:35,800 --> 00:07:38,190 ان يحدث؟ 134 00:07:38,190 --> 00:07:40,040 حسنا، إذا نظرنا إلى الوراء في التعليمات البرمجية، 135 00:07:40,040 --> 00:07:44,800 ونحن نرى أن ذلك أبدا تهيئة، لذلك لدينا فقط في سلة المهملات هناك. 136 00:07:44,800 --> 00:07:46,820 والتي تلقي بالتأكيد من حساباتنا. 137 00:07:46,820 --> 00:07:49,930 >> لحسن الحظ، لم يكن لدينا لمغادرة GDB لإصلاح هذه. 138 00:07:49,930 --> 00:07:54,590 يمكننا تهيئة هنا الحق وإصلاحه في وقت لاحق باستخدام رمز الأمر الطباعة. 139 00:07:54,590 --> 00:07:59,500 سنقوم تهيئة إلى 1 منذ factorials صفر و 1 على حد سواء 1، 140 00:07:59,500 --> 00:08:03,940 وإذا كنا تهيئة لصفر، ثم كنا دائما في نهاية المطاف مع الصفر نتيجة لدينا. 141 00:08:03,940 --> 00:08:08,370 يمكنك تعيين أي متغير بهذه الطريقة، وهو مفيد عظمى. 142 00:08:08,370 --> 00:08:10,920 الآن، دعونا مواصلة برنامجنا. 143 00:08:10,920 --> 00:08:14,040 دعونا نتأكد من كل شيء هو المكان أنه من المفترض أن يكون. 144 00:08:14,040 --> 00:08:19,090 يجب أن يكون NUM 4، وسأكون 1، ويجب أن يكون 1 مضروب أيضا. 145 00:08:19,090 --> 00:08:23,990 يمكننا اختصار هذه العملية وطباعة كافة المتغيرات مجتمعاتنا المحلية 146 00:08:23,990 --> 00:08:26,440 مع السكان المحليين الأمر معلومات مفيدة فائقة، 147 00:08:26,440 --> 00:08:29,190 الذي يطبع من كل المتغيرات في نطاق مجتمعاتنا المحلية. 148 00:08:29,190 --> 00:08:31,980 على أي حال، يبدو أن كل شيء على ما يرام. 149 00:08:31,980 --> 00:08:34,700 >> دعونا نفعل أخرى حول GO-من الحلقة فقط للتأكد. 150 00:08:34,700 --> 00:08:38,789 حسنا، كل شيء يبدو رائعا. 151 00:08:38,789 --> 00:08:41,659 الآن يمكننا استخدام الأمر الاستمرار في الذهاب الى نهاية المطاف. 152 00:08:41,659 --> 00:08:46,170 حلوة! 4 مضروب المطبوعة يعمل 24 كما هو متوقع. 153 00:08:46,170 --> 00:08:48,690 الآن يمكننا أن نذهب في إصلاح هذه رمز لدينا. 154 00:08:48,690 --> 00:08:53,710 بدلا من استقالته لGDB، سنستخدم علامة تبويب أخرى محطة للقيام بذلك. 155 00:08:53,710 --> 00:08:58,080 العودة إلى علامة التبويب GDB دينا، ونحن الآن بحاجة إلى إعادة ترجمة قابل للتنفيذ لدينا. 156 00:08:58,080 --> 00:09:03,180 واحدة من أفضل الأشياء عن GDB هو أنك لا تحتاج إلى مغادرة GDB لتشغيل القيام بها. 157 00:09:03,180 --> 00:09:06,570 ذلك أننا لا تبقي ضرب نقاط التوقف القديمة، 158 00:09:06,570 --> 00:09:10,440 دعونا تعطيلها مع، هل تفكر في ذلك، تعطيل الأوامر. 159 00:09:10,440 --> 00:09:13,320 سيؤدي ذلك إلى تعطيل كافة نقاط التوقف لدينا. 160 00:09:13,320 --> 00:09:18,180 الآن، يمكننا إعادة تشغيل البرنامج مع البحث والتأكد من كل شيء على ما يرام. 161 00:09:18,180 --> 00:09:21,300 يبدو كل شيء على ما يرام. 162 00:09:21,300 --> 00:09:24,410 مضروب من 4 بطباعة 24، تماما مثل كنا نظن. 163 00:09:24,410 --> 00:09:28,830 GDB هي واحدة من أكثر الأدوات مفيدة كنت قد حصلت في الأدوات الخاصة بك. 164 00:09:28,830 --> 00:09:31,970 >> هناك أشياء أكثر من نصف طن يمكنك القيام به مع GDB، 165 00:09:31,970 --> 00:09:34,030 أكثر بكثير مما تستطيع القيام به مع مطبوعات بسيطة. 166 00:09:34,030 --> 00:09:36,730 في المرة القادمة برنامجك لا تفعل ما تريد، 167 00:09:36,730 --> 00:09:39,740 حاول تشغيل GDB لمعرفة ما يجري في الداخل. 168 00:09:39,740 --> 00:09:44,380 مع القليل من الممارسة، عليك أن تكون قادرا على النفاذ إلى الأسفل على الحق الخاص بك علة في أي وقت من الأوقات. 169 00:09:44,380 --> 00:09:48,180 اسمي نيت Hardison. هذا هو CS50.