[Powered by Google Translate] GDB، ومشروع جنو المصحح، هو أداة قوية لتصحيح C، جنبا إلى جنب مع العديد من اللغات الأخرى. انها تسمح لك لكزة حول البرامج داخل C الخاص بك في حين انهم المنفذة، ويعطي لك الفرصة أيضا لمعرفة ما يحدث بالضبط عندما تعطل البرنامج. انها أنيق جدا، أليس كذلك؟ GDB هي البرمجيات الحرة، وأنه يعمل على UNIX وشعبية كثيرة أنظمة التشغيل المستندة إلى Windows، لذلك فمن أداة على نطاق واسع جدا. ينبغي أن تتعلم أن تحب ذلك. الايجابيات GDB وقتا أسهل بكثير تعقب البق من أولئك الذين تدبر أمرها من خلال استخدام التخمينات وكميات لا نهائية من البيانات المطبوعة. GDB هو أداة سطر الأوامر، مما يعني أنك يمكن أن تتفاعل معها في محطة إصدار الأوامر عن طريق لوحة المفاتيح بدلا من الأزرار النقر بالماوس. لبدء GDB، كنت حرفيا فقط نوع جدب في موجه وتصل إلى تدخل. سترى بعض خطوط تطبع على الشاشة يظهر لك إصدار GDB التي تقوم بتشغيل، المعلومات حق المؤلف، وعند نهاية سترى موجه GDB: (GDB). هذا يتيح لك معرفة أن GDB مستعد لأوامر. في هذه النقطة، يتم إنهاء أهم شيء أن تعرف كيفية القيام به. لحسن الحظ، وهذا هو بسيط جدا. الأمر إنهاء يفعل ذلك بالضبط. كاختصار، يمكنك فقط استخدام س أيضا. ممتعا بقدر تمهيد GDB والإقلاع عنه فورا ثم هو، دعونا الآن نتحدث عن استخدام GDB للمساعدة في تصحيح البرنامج. للبدء، لقد حصلت على البرنامج هنا في factorial.c أن يحصل على الباحث ويحاول لحساب مضروب به. في حال كنت لم أر factorials قبل أو لا تذكرها، مضروب العدد n يساوي نتاج ن - (ن - 1) و (ن - 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 لتنفيذ هذا السطر من التعليمات البرمجية وتذهب إلى السطر التالي مع الأمر التالي أو ن. حسنا، الآن GDB يخبرنا أننا على خط GetInt. وأنا أعلم أنه يبدو وكأنه خط printf لم يتم تشغيل لأننا لا نرى "أدخل عدد صحيح إيجابية" الطباعة على الشاشة، إلا أنها في الواقع تشغيل. ما نراه هو نظام التشغيل قمع أي شيء الكتابة إلى الشاشة حتى على الإطلاق ل، التي لماذا التصحيح مع المطبوعات يمكن أن يبدو في بعض الأحيان لا يمكن الاعتماد عليها. على أي حال، دعونا مرة أخرى تذهب إلى السطر التالي من التعليمات البرمجية وأدخل في كثافة العمليات. مرة أخرى، دعونا اكتب 4. ولذلك فإن هذا يبدو غريبا. نحن في السطر 12 وفقا لGDB، ولكن السطر التالي وهذا على وشك تنفيذ هو مجرد متعرج. هذا يعني فقط أننا في نهاية حلقة، ونحن نفعل حين حلقة في الواقع، وGDB يقول لنا أن حالة الإنهاء، وهي لا شيء أقل من الصفر، سيتم تنفيذ المقبل. إذا كانت هذه يحصل أي وقت مضى قليلا مربكة، يمكننا سحب ما يصل إلى التعليمات البرمجية المصدر في GDB مع قائمة أو أمر لتر. هذا بطباعة شفرة المصدر انها تركزت حول أن الخط الذي نحن حاليا. إذا كان لنا أن اكتب قائمة أو ل مرة أخرى، وسنرى المجموعة التالية من خطوط طباعة. يمكننا أن نفعل هذا حتى أننا بلغ نهاية الملف. لنعود إلى حيث كنا، ويمكننا ان نورد قائمة مع عدد الخط، في هذه الحالة، السطر 12. على أي حال، دعونا نمضي قدما. الآن نحن على حلقة 4. دعونا نتأكد من أن لدينا متغير يحتوي على 4 الأسطوانات. ونحن نفعل ذلك مع الطباعة، أو P، الأوامر. لذلك، GDB يخبرنا بأن يتم تخزين الأسطوانات في الواقع 4، كما كنا نتوقع. 1 أن مبلغ ال GDB يطبع خارج متغير GDB الخاص ومن المقرر الآن أن لتخزين 4 عدد كذلك. يمكنك تجاهل هذا الآن، ولكن هذه المتغيرات تأتي في GDB السوبر يدوية في الحالات الأكثر تقدما عندما تريد أن أذكر ما قمت به في الماضي. على أية حال، مع الانتقال المقبل، ونحن نرى أن نبدأ التحرك من خلال لحلقة. دعونا نمضي من هنا مع بت ن فشيئا. بدلا من الكتابة في كل مرة ن، يمكنك أيضا اضغط على زر الإدخال. عندما ضرب الدخول دون كتابة أي شيء، فقط GDB يكرر الأمر السابق. الآن حتى لقد ضرب لنا الدعوة printf. يبدو أننا قد ذهبت بالفعل من خلال لدينا حلقة 4 مرات، وهو ما نريد أن نفعله من أجل مضاعفة بنسبة 1، 2، 3، و 4. كل شيء يبدو أنه يعمل، إلا أننا عندما ضرب مرة أخرى المقبل نحصل على هذا الكم الهائل بدلا من 24. إذا كنا طباعة قيمة مضروب ع الخاص، ونحن نرى أن هذا مضروب لديها عدد هائل فيه. بالتأكيد شيئا ما يحدث خطأ. في هذه المرحلة، على الرغم من أننا تقريبا في نهاية البرنامج، وفوات الاوان لإصلاح أي شيء. ومع ذلك، لا يمكننا إعادة تشغيل البرنامج مرة أخرى عن طريق كتابة R ثم Y للتأكيد. الآن عدنا إلى نقطة توقف لدينا في بداية الرئيسي. ونحن نعلم أن كل شيء يبدو على ما يرام مع القراءة في ن. حتى نتمكن من القفز إلى الأمام مع ن. بدلا من ذلك، يمكننا تعيين نقطة توقف جديدة بعد القيام بينما حلقة والقفز هناك. دعونا نفعل ذلك. يبدو السطر 14 يأتي بعد الحلقة. دعونا تعيين نقطة توقف هناك. انها ممارسة جيدة لتحديد اسم الملف في هذا الأمر نقطة توقف يمكن الحصول على الخلط منذ GDB إذا كنت تعمل مع ملفات متعددة. للمضي قدما في هذا توقف، سوف نستخدم الأمر متابعة أو ج. حسنا، نحن هنا في لحلقة. دعونا نذهب خط 1 أكثر في لحلقة، وبعد ذلك سوف نبدأ الطباعة المتغيرات لمعرفة ما يجري. دعونا نتأكد من أن كنت حقا 1، كما هو متوقع. نعم، كل هذا جيد. ما مضروب حول على الرغم من؟ قف، وهذا ليس جيدا. لدينا عدد كبير السلبية هنا. ان يحدث؟ حسنا، إذا نظرنا إلى الوراء في التعليمات البرمجية، ونحن نرى أن ذلك أبدا تهيئة، لذلك لدينا فقط في سلة المهملات هناك. والتي تلقي بالتأكيد من حساباتنا. لحسن الحظ، لم يكن لدينا لمغادرة GDB لإصلاح هذه. يمكننا تهيئة هنا الحق وإصلاحه في وقت لاحق باستخدام رمز الأمر الطباعة. سنقوم تهيئة إلى 1 منذ factorials صفر و 1 على حد سواء 1، وإذا كنا تهيئة لصفر، ثم كنا دائما في نهاية المطاف مع الصفر نتيجة لدينا. يمكنك تعيين أي متغير بهذه الطريقة، وهو مفيد عظمى. الآن، دعونا مواصلة برنامجنا. دعونا نتأكد من كل شيء هو المكان أنه من المفترض أن يكون. يجب أن يكون NUM 4، وسأكون 1، ويجب أن يكون 1 مضروب أيضا. يمكننا اختصار هذه العملية وطباعة كافة المتغيرات مجتمعاتنا المحلية مع السكان المحليين الأمر معلومات مفيدة فائقة، الذي يطبع من كل المتغيرات في نطاق مجتمعاتنا المحلية. على أي حال، يبدو أن كل شيء على ما يرام. دعونا نفعل أخرى حول GO-من الحلقة فقط للتأكد. حسنا، كل شيء يبدو رائعا. الآن يمكننا استخدام الأمر الاستمرار في الذهاب الى نهاية المطاف. حلوة! 4 مضروب المطبوعة يعمل 24 كما هو متوقع. الآن يمكننا أن نذهب في إصلاح هذه رمز لدينا. بدلا من استقالته لGDB، سنستخدم علامة تبويب أخرى محطة للقيام بذلك. العودة إلى علامة التبويب GDB دينا، ونحن الآن بحاجة إلى إعادة ترجمة قابل للتنفيذ لدينا. واحدة من أفضل الأشياء عن GDB هو أنك لا تحتاج إلى مغادرة GDB لتشغيل القيام بها. ذلك أننا لا تبقي ضرب نقاط التوقف القديمة، دعونا تعطيلها مع، هل تفكر في ذلك، تعطيل الأوامر. سيؤدي ذلك إلى تعطيل كافة نقاط التوقف لدينا. الآن، يمكننا إعادة تشغيل البرنامج مع البحث والتأكد من كل شيء على ما يرام. يبدو كل شيء على ما يرام. مضروب من 4 بطباعة 24، تماما مثل كنا نظن. GDB هي واحدة من أكثر الأدوات مفيدة كنت قد حصلت في الأدوات الخاصة بك. هناك أشياء أكثر من نصف طن يمكنك القيام به مع GDB، أكثر بكثير مما تستطيع القيام به مع مطبوعات بسيطة. في المرة القادمة برنامجك لا تفعل ما تريد، حاول تشغيل GDB لمعرفة ما يجري في الداخل. مع القليل من الممارسة، عليك أن تكون قادرا على النفاذ إلى الأسفل على الحق الخاص بك علة في أي وقت من الأوقات. اسمي نيت Hardison. هذا هو CS50.