نقطة توقف

في تطوير البرمجيات ، نقطة التوقف هي مكان توقف أو توقف مقصود في البرنامج ، يتم وضعه لأغراض التصحيح . ويشار إليها أحيانًا أيضًا باسم التوقف المؤقت .
بشكل عام، نقطة التوقف هي وسيلة لاكتساب المعرفة حول برنامج أثناء تنفيذه. أثناء المقاطعة ، يقوم المبرمج بفحص بيئة الاختبار ( السجلات العامة والذاكرة والسجلات والملفات وما إلى ذلك) لمعرفة ما إذا كان البرنامج يعمل كما هو متوقع. في الممارسة العملية، تتكون نقطة التوقف من شرط واحد أو أكثر يحدد متى يجب مقاطعة تنفيذ البرنامج.
تاريخ
تم اختراع نقاط التوقف لجهاز ENIAC ، أحد أقدم أجهزة الكمبيوتر الرقمية، بواسطة المبرمجة بيتي هولبرتون . [1] في التصميم الأولي لجهاز ENIAC، تم ضبط تدفق البرنامج عن طريق توصيل الكابلات من وحدة إلى أخرى. لجعل البرنامج يتوقف عند نقطة معينة، تمت إزالة كابل يسمى نقطة التوقف . [2]
أنواع نقاط التوقف
نقاط توقف الآلة
كانت أجهزة الكمبيوتر المركزية المبكرة، مثل IBM/360 ، تحتوي على مفاتيح/أقراص تحكم تسمح بنقاط توقف عند عناوين تخزين تعليمات محددة وتوفر تشغيل "دورة واحدة"، مما يسمح بمراقبة محتويات السجلات والذاكرة مباشرة على أضواء وحدة التحكم. أدى ظهور تعدد المهام إلى الحد من استخدام هذا الخيار حيث تم إيقاف تشغيل الجهاز بالكامل.
نقاط توقف غير تفاعلية
لقد استخدم المبرمجون تصحيحات التعليمات البرمجية الآلية لتنفيذ نقاط توقف مدمرة واحدة للتسبب في تفريغ النواة منذ الأيام الأولى لأجهزة الكمبيوتر. وقد وفر تفريغ النواة حالة السجلات والذاكرة في اللحظة المحددة لـ "التعطل" المتعمد.
نقاط توقف تفاعلية
لقد سمح ظهور لوحات التحكم في آلة الكتابة عن بعد في ستينيات القرن العشرين بقدرات أكثر تفاعلية لتصحيح أخطاء سطر الأوامر ، ولكن لم يكن الأمر كذلك حتى أوائل السبعينيات ووصول شاشات الفيديو المنتشرة المتصلة بالحواسيب الكبيرة ، حيث أصبح تصحيح الأخطاء التفاعلي الكامل على الشاشة الكاملة في بيئات تعدد المهام حقيقة واقعة. وقد سمح هذا أيضًا بتنفيذ البرنامج خطوة بخطوة بطريقة الرسوم المتحركة الحقيقية للبرنامج مع عرض تعديلات السجل والذاكرة الاختيارية في نفس الوقت. في البداية كان هذا النوع من الرسوم المتحركة على مستوى الكود الآلي المفكك أو المفكك ، ولكن تم تطويره لاحقًا إلى الرسوم المتحركة على مستوى مصدر HLL .
نقاط توقف مشروطة
تُستخدم نقاط التوقف عادةً لمقاطعة برنامج قيد التشغيل مباشرةً قبل تنفيذ تعليمات محددة من قِبل المبرمج . يُشار إلى هذا عادةً باسم نقطة توقف التعليمات .
يمكن أيضًا استخدام أنواع أخرى من الشروط، مثل قراءة أو كتابة أو تعديل موقع معين في منطقة من الذاكرة. يُشار إلى هذا غالبًا باسم نقطة توقف البيانات أو نقطة المراقبة . تدعم العديد من الأنظمة أيضًا نقاط التوقف التي تكون نشطة فقط إذا تم استيفاء شرط (مثل متغير له قيمة معينة)، ويشار إليها عادةً باسم نقطة توقف مشروطة . [3]
أدوات التفتيش
عند الوصول إلى نقطة توقف، يتم استخدام أدوات مختلفة لفحص حالة البرنامج أو تغييرها. يمكن استخدام تتبع المكدس لكل خيط لمعرفة سلسلة استدعاءات الوظيفة التي أدت إلى التعليمات المتوقفة مؤقتًا. تتيح قائمة المراقبة للمرء عرض قيم المتغيرات والتعبيرات المحددة . قد تكون هناك أيضًا أدوات لإظهار محتويات السجلات ووحدات البرنامج المحملة والمعلومات الأخرى.
نقاط السجل
نقطة التسجيل هي نوع من نقاط التوقف التي تطبع (أو تسجل ) المعلومات فقط بدلاً من مقاطعة التنفيذ. عادةً ما يستطيع المطور تحديد رسالة و/أو قيم المتغيرات للطباعة عندما يصل التنفيذ إلى نقطة معينة. [4] نقاط التسجيل هي بديل لوضع عبارات التسجيل في البرنامج الذي يتم تصحيح أخطائه (يُطلق عليها أحيانًا تصحيح أخطاء printf )، وهي مفيدة بشكل خاص عندما لا يكون تغيير البرنامج عمليًا (على سبيل المثال عند تصحيح أخطاء مكتبة خارجية تم استدعاؤها بواسطة البرنامج).
التنفيذات
الأجهزة
تتضمن العديد من المعالجات دعمًا ماديًا لنقاط التوقف (عادةً نقاط توقف التعليمات والبيانات). على سبيل المثال، توفر بنية مجموعة التعليمات x86 دعمًا ماديًا لنقاط التوقف باستخدام سجلات تصحيح أخطاء x86 الخاصة بها . قد تتضمن هذه الأجهزة قيودًا، على سبيل المثال عدم السماح بنقاط التوقف على التعليمات الموجودة في فتحات تأخير الفروع . يتم فرض هذا النوع من القيود بواسطة البنية الدقيقة للمعالج ويختلف من معالج إلى آخر.
برمجة
في غياب الدعم المادي (وفي بيئات تعدد المهام)، يتعين على المصححين تنفيذ نقاط توقف في البرامج. بالنسبة لنقاط توقف التعليمات، تعد هذه مهمة بسيطة نسبيًا تتمثل في استبدال التعليمات في موقع نقطة التوقف بأي مما يلي:
- تعليمات تستدعي المصحح مباشرةً (على سبيل المثال، نداء النظام ، أو int3 في حالة x86 ) أو
- تعليمات غير صالحة تتسبب في مقاطعة متعمدة للبرنامج (يتم اعتراضها/معالجتها بعد ذلك بواسطة المصحح)
قد يكون من الصعب تنفيذ هذه التقنية في أنظمة تعدد المهام التي تستخدم تخزين البرامج المشتركة (قد يحدث الانقطاع في خيط مختلف، مما يتطلب إعادة إحياء التعليمات الأصلية لهذا الخيط). أيضًا، إذا كان البرنامج موجودًا في ذاكرة محمية، فقد يتم منع الكتابة فوق التعليمات.
بدلاً عن ذلك،
- يمكن لمحاكي مجموعة التعليمات تنفيذ نقاط توقف مشروطة أو غير مشروطة، وذلك ببساطة عن طريق تضمين اختبارات الحالة المناسبة داخل دورة البرنامج العادية الخاصة به - وهو ما يسمح أيضًا بشكل طبيعي بنقاط توقف غير جراحية (على برامج القراءة فقط على سبيل المثال).
- يمكن للغات المفسرة أن تستخدم بشكل فعال نفس المفهوم المذكور أعلاه في دورة برمجتها.
- "إن ""تجهيز"" كافة أكواد المصدر بعبارات مصدرية إضافية تصدر دالة تستدعي برنامجًا فرعيًا داخليًا أو خارجيًا للتصحيح"" هو نهج شائع آخر. تزيد هذه الطريقة من حجم الملف الثنائي وقد تؤثر سلبًا على تخصيص الذاكرة العادي ومعالجات الاستثناءات . توجد خيارات ""تصحيح"" في بعض المترجمات لتنفيذ هذه التقنية بشكل شبه شفاف.
تسمح بعض أدوات تصحيح الأخطاء بتعديل السجلات أو متغيرات البرنامج في الذاكرة قبل استئناف التشغيل، مما يسمح فعليًا بتقديم مهام مؤقتة "مبرمجة يدويًا" لأغراض الاختبار. وبالمثل، يمكن غالبًا تخطي تعليمات البرنامج لتحديد تأثير التغييرات على منطق البرنامج - مما يتيح الإجابة على الأسئلة حول تنفيذ البرنامج بطريقة مباشرة (أي بدون افتراضات أو تخمين). في كثير من الحالات، قد تكون هذه هي الطريقة العملية الوحيدة لاختبار البرامج الفرعية الغامضة "المدفوعة بالأحداث" التي نادرًا ما يتم تنفيذها - إن تم تنفيذها على الإطلاق - دون المخاطرة الإضافية المتمثلة في ترك تغييرات مؤقتة في المصدر. يمكن استخدام تغيير موقع الاستئناف يدويًا داخل برنامج متوقف مؤقتًا لإدخال قسم نادرًا ما يتم تنفيذه من التعليمات البرمجية (مثل معالج حالة أجهزة معين).
ومع ذلك، فإن تنفيذ نقاط توقف البيانات في البرامج يمكن أن يقلل بشكل كبير من أداء التطبيق الذي يتم تصحيح أخطائه - لأنه يستخدم موارد إضافية على نفس المعالج. [5] ومع ذلك، يكون هذا مقبولًا عادةً أثناء الاختبار ولا يتم تقييد كمية المعلومات المتاحة من المصحح بحدود بيانات التصحيح المعروفة للأجهزة. على سبيل المثال، يمكن لتطبيق البرنامج جمع بيانات المسار المنطقي على مستوى البرنامج/البرنامج الفرعي/التعليمات لزيادة ما قد يتم تخزينه بواسطة منصة الأجهزة المعينة للتفتيش بشكل كبير. تقلل طريقة محاكاة مجموعة التعليمات بشكل كبير من النفقات العامة، مقارنة بطريقة استبدال التعليمات (المكررة)، مما يقلل أيضًا من أخطاء التخزين المؤقت .
تعرض بعض تطبيقات لغات البرمجة وظائف التصحيح الخاصة بها لاستخدامها بواسطة برامج أخرى. على سبيل المثال، تحتوي بعض لهجات FORTRANAT على جملة، كانت في الأصل مخصصة للعمل كنقطة توقف للتعليمات.
تنفذ Python مصحح أخطاء يمكن الوصول إليه من برنامج Python. [6]
يمكن إساءة استخدام هذه المرافق [7] للعمل مثل جملة COMEFROM .
انظر أيضا
- قادم من
- برنامج الرسوم المتحركة (الخطوات)
- سيمون
مراجع
- ^ Abbate, Janet (2012), Recoding Gender: Women's Changing Participation in Computing , MIT Press, p. 32, ISBN 9780262018067
- ^ توماس هايغ؛ مارك بريستلي؛ كريسبن روب (2016). ENIAC في العمل: صنع وإعادة صنع الكمبيوتر الحديث . مطبعة معهد ماساتشوستس للتكنولوجيا. ص. 153. ISBN 978-0-262-03398-5.
- ^ "الأسئلة الشائعة كيف أقوم بتعيين نقطة توقف مشروطة؟". Eclipse Wiki . تم الاسترجاع في 2023-04-19 .
- ^ والش، ديفيد (2021-03-22). "استخدام نقاط السجل!". مدونة ديفيد والش . تم الاسترجاع في 2023-04-19 .
- ^ تم أرشفة GDB Internals في 29 نوفمبر 2011 على موقع Wayback Machine
- ^ مرجع مكتبة بايثون: مصحح أخطاء بايثون محفوظ في 13 سبتمبر 2008، على موقع واي باك مشين
- ^ entrian.com – goto و comefrom لـ Python
