مصحح الأخطاء

المصحح هو برنامج يُستخدم لتنفيذ برنامج حاسوبي في بيئة تسمح بفحص البرنامج والتحكم فيه على مستوى البرمجة . يُستخدم المصحح غالبًا لتصحيح الأخطاء ، ولكن يمكن استخدامه لأغراض أخرى، بما في ذلك الاختبار . تشمل الميزات الشائعة للمصحح تتبع تنفيذ التعليمات البرمجية سطرًا بسطر، والتدخل في مسار تنفيذ البرنامج، وإدارة نقاط التوقف ، والإبلاغ عن استخدام الذاكرة وتعديلها.
يُوفّر مُصحِّح الأخطاء على مستوى المصدر (المعروف أيضًا باسم مُصحِّح الأخطاء الرمزي ) تجربة مستخدم تُدمج شفرة المصدر للبرنامج . عادةً، يُمكن لهذا النوع من المُصحِّحات تحديد سطر شفرة المصدر الذي يُطابق نقطة تنفيذ البرنامج، كما يُتيح قراءة وكتابة الذاكرة باستخدام رموز شفرة المصدر. في المقابل، يُظهر مُصحِّح الأخطاء منخفض المستوى (المعروف أيضًا باسم مُصحِّح أخطاء لغة الآلة ) نقطة التنفيذ كشفرة الآلة أو لغة التجميع المُصاحبة لها ، ويُتيح الوصول إلى الذاكرة عن طريق العنوان فقط.
قد يتم تشغيل الكود المراد فحصه على محاكي مجموعة التعليمات (ISS)، وهي تقنية تتميز بقدرتها الفائقة على التوقف عند مواجهة شروط محددة، ولكنها عادةً ما تكون أبطأ من تنفيذ الكود مباشرةً على المعالج المناسب (أو المعالج نفسه). توفر بعض أدوات تصحيح الأخطاء وضعين للتشغيل، محاكاة كاملة أو جزئية، للحد من هذا التأثير.
سمات
عادةً، توفر أدوات تصحيح الأخطاء معالج استعلامات، ومحلل رموز، ومفسر تعابير، وواجهة دعم تصحيح الأخطاء في أعلى مستوياتها. [ 1 ] كما توفر أدوات تصحيح الأخطاء وظائف أكثر تطورًا، مثل تشغيل البرنامج خطوة بخطوة ( التنفيذ المتسلسل أو تحريك البرنامج )، وإيقاف البرنامج مؤقتًا ( إيقافه مؤقتًا لفحص حالته الحالية) عند حدث معين أو تعليمة محددة باستخدام نقطة توقف ، وتتبع قيم المتغيرات. [ 2 ] بعض أدوات تصحيح الأخطاء لديها القدرة على تعديل حالة البرنامج أثناء تشغيله. وقد يكون من الممكن أيضًا استئناف التنفيذ من موقع مختلف في البرنامج لتجاوز عطل أو خطأ منطقي.
إنّ الوظيفة نفسها التي تجعل مصحح الأخطاء مفيدًا في تصحيح الأخطاء البرمجية، تسمح باستخدامه كأداة لاختراق البرامج للتحايل على حماية النسخ ، وإدارة الحقوق الرقمية ، وغيرها من ميزات حماية البرامج. كما أنها غالبًا ما تجعله مفيدًا كأداة تحقق عامة، وتغطية للأخطاء ، ومحلل للأداء ، خاصةً إذا تم عرض أطوال مسارات التعليمات . [ 3 ]
توفر معظم محركات تصحيح الأخطاء الشائعة، مثل gdb و dbx ، واجهات سطر أوامر قائمة على وحدة التحكم . وتُعد واجهات المستخدم الأمامية لمحركات تصحيح الأخطاء امتدادات شائعة توفر التكامل مع بيئات التطوير المتكاملة ، ورسوم متحركة للبرامج، وميزات عرض مرئي.
معالجة أخطاء البرنامج
إذا كان البرنامج قيد التشغيل باستخدام مصحح الأخطاء، وحدث استثناء بسبب خطأ برمجي أو بيانات غير صالحة، يتم إخطار مصحح الأخطاء بهذا الاستثناء. عندما "يتوقف" البرنامج أو يصل إلى حالة محددة مسبقًا، يُظهر مصحح الأخطاء عادةً موقع الخطأ في الكود الأصلي إذا كان مصحح أخطاء على مستوى المصدر أو مصحح أخطاء رمزي. أما إذا كان مصحح أخطاء منخفض المستوى أو مصحح أخطاء للغة الآلة، فإنه يُظهر السطر في تفكيك الكود (إلا إذا كان لديه أيضًا إمكانية الوصول المباشر إلى الكود المصدر الأصلي ويمكنه عرض الجزء المناسب من الكود من التجميع أو الترجمة).
تسجيل وإعادة تشغيل تصحيح الأخطاء
تُعرف تقنية تصحيح الأخطاء بالتسجيل وإعادة التشغيل [ 4 ] ، أو ما يُسمى أيضًا "تسجيل مسار البرنامج" أو "تسجيل تنفيذ البرنامج"، حيث تقوم بتسجيل تغييرات حالة التطبيق وتخزينها على القرص مع تنفيذ كل تعليمة في البرنامج. ويمكن بعد ذلك إعادة تشغيل التسجيل وتصحيحه بشكل تفاعلي لتشخيص العيوب وحلها. تُعد تقنية تصحيح الأخطاء بالتسجيل وإعادة التشغيل مفيدةً لتصحيح الأخطاء عن بُعد ولحل العيوب المتقطعة وغير الحتمية وغيرها من العيوب التي يصعب إعادة إنتاجها.
تصحيح الأخطاء العكسي
تتضمن بعض أدوات تصحيح الأخطاء ميزة تُسمى " التصحيح العكسي "، والمعروفة أيضًا باسم "التصحيح التاريخي" أو "التصحيح العكسي". تُمكّن هذه الأدوات من تتبع تنفيذ البرنامج خطوة بخطوة عكسيًا. وتتضمن العديد من أدوات تصحيح الأخطاء هذه الميزة. يوفر Microsoft Visual Studio (إصدارات 2010 Ultimate و2012 Ultimate و2013 Ultimate و2015 Enterprise) ميزة IntelliTrace للتصحيح العكسي للغات C# وVisual Basic .NET وبعض اللغات الأخرى، باستثناء C++. كما تتوفر أدوات تصحيح عكسي للغات C وC++ وJava وPython وPerl وغيرها. بعضها مفتوح المصدر، وبعضها الآخر برامج تجارية احتكارية. قد تُبطئ بعض أدوات التصحيح العكسي أداء البرنامج المستهدف بشكل كبير، ولكن أفضلها لا تُسبب تباطؤًا يزيد عن الضعف. يُعد التصحيح العكسي مفيدًا جدًا لأنواع معينة من المشاكل، ولكنه ليس شائع الاستخدام. [ 5 ]
تصحيح أخطاء السفر عبر الزمن
بالإضافة إلى ميزات أدوات تصحيح الأخطاء العكسية، فإن تصحيح الأخطاء عبر السفر عبر الزمن يسمح أيضًا للمستخدمين بالتفاعل مع البرنامج، وتغيير السجل إذا رغبوا في ذلك، ومشاهدة كيفية استجابة البرنامج.
الاعتماد على اللغة
تعمل بعض أدوات تصحيح الأخطاء على لغة برمجة واحدة محددة، بينما يمكن لبعضها الآخر التعامل مع لغات متعددة بسلاسة. على سبيل المثال، إذا كان البرنامج الرئيسي مكتوبًا بلغة كوبول ولكنه يستدعي إجراءات فرعية بلغة التجميع وإجراءات فرعية بلغة PL/1 ، فقد يضطر مصحح الأخطاء إلى تغيير أوضاعه ديناميكيًا لمواكبة التغييرات في اللغة عند حدوثها.
حماية الذاكرة
تتضمن بعض أدوات تصحيح الأخطاء أيضًا حماية للذاكرة لتجنب انتهاكات التخزين مثل تجاوز سعة المخزن المؤقت . قد يكون هذا الأمر بالغ الأهمية في بيئات معالجة المعاملات حيث يتم تخصيص الذاكرة ديناميكيًا من "مجموعات" الذاكرة على أساس كل مهمة على حدة.
دعم الأجهزة لتصحيح الأخطاء
بعض المعالجات لديها دعم مادي لتنفيذ البرنامج خطوة بخطوة، مثل علامة الفخ .
تحتوي معظم المعالجات الدقيقة الحديثة على واحدة على الأقل من هذه الميزات في تصميم وحدة المعالجة المركزية الخاصة بها لتسهيل عملية تصحيح الأخطاء:
- دعم الأجهزة لنقاط توقف التعليمات البرمجية والبيانات ، مثل مقارنات العناوين ومقارنات قيم البيانات، أو، مع بذل جهد أكبر بكثير، أجهزة أخطاء الصفحات . [ 6 ]
- تتيح برمجة النظام الداخلية (ISP) لمصحح أخطاء الأجهزة الخارجية إعادة برمجة النظام قيد الاختبار (على سبيل المثال، إضافة نقاط توقف التعليمات أو إزالتها). كما أن العديد من الأنظمة التي تدعم برمجة النظام الداخلية (ISP) تتمتع أيضًا بدعم آخر لتصحيح أخطاء الأجهزة.
- يمكن الوصول إلى واجهات تصحيح الأخطاء للأجهزة عبر JTAG، مثل تلك الموجودة في معالجات معمارية ARM ، أو باستخدام مجموعة أوامر Nexus . عادةً ما تتمتع المعالجات المستخدمة في الأنظمة المدمجة بدعم واسع النطاق لتصحيح الأخطاء عبر JTAG.
- تحتاج المتحكمات الدقيقة ذات الستة دبابيس فقط إلى استخدام بدائل ذات عدد دبابيس منخفض لبروتوكول JTAG، مثل BDM أو Spy-Bi-Wire أو debugWIRE في متحكم Atmel AVR . على سبيل المثال، يستخدم debugWIRE إشارات ثنائية الاتجاه على دبوس إعادة الضبط (RESET).
واجهات أمامية لتصحيح الأخطاء
تعتمد بعض أدوات تصحيح الأخطاء الأكثر كفاءة وشيوعًا على واجهة سطر أوامر بسيطة (CLI)، وذلك غالبًا لزيادة قابلية النقل وتقليل استهلاك الموارد. ويرى المطورون عادةً أن تصحيح الأخطاء عبر واجهة المستخدم الرسومية (GUI) أسهل وأكثر إنتاجية. لهذا السبب، تُستخدم واجهات المستخدم الرسومية التي تتيح للمستخدمين مراقبة أدوات تصحيح الأخطاء التي تعمل عبر واجهة سطر الأوامر والتحكم بها . بعض واجهات المستخدم الرسومية لأدوات تصحيح الأخطاء مصممة لتكون متوافقة مع مجموعة متنوعة من أدوات تصحيح الأخطاء التي تعمل عبر واجهة سطر الأوامر، بينما تستهدف واجهات أخرى أداة تصحيح أخطاء محددة.
تصحيح الأخطاء الأخلاقي أو القانوني
يُستخدم تصحيح الأخطاء غالبًا لاختراق البرامج أو قرصنتها بشكل غير قانوني، وهو أمر غير قانوني في العادة حتى لو تم بحسن نية. أما برامج "Crackme" فهي برامج مصممة خصيصًا لاختراقها أو تصحيح أخطائها. تُمكّن هذه البرامج من يمتلكون أدوات تصحيح الأخطاء من ممارسة مهاراتهم في هذا المجال دون التعرض للمساءلة القانونية.
انظر أيضاً
مراجع
الاقتباسات
- ↑ أغاروال وكومار 2003 ، ص 302.
- ↑ أغاروال وكومار 2003 ، ص 301.
- ↑ أغاروال وكومار 2003 ، ص 307-312.
- ↑ أوكالاهان، روبرت؛ جونز، كريس؛ فرويد، ناثان؛ هيوي، كايل؛ نول، ألبرت؛ بارتوش، نمرود (2017). "التسجيل الهندسي وإعادة التشغيل من أجل قابلية النشر: تقرير فني موسع". arXiv : 1705.05937 [ cs.PL ].
- ↑ فيليب كلاسن؛ شركة أندو سوفتوير. "لماذا نادراً ما يُستخدم تصحيح الأخطاء العكسي؟" . موقع ستاك إكستشينج للمبرمجين . شركة ستاك إكستشينج . تم الاطلاع عليه بتاريخ 12 أبريل 2015 .
- ↑ أغاروال وكومار 2003 ، ص 299-301.
مصادر
- سانجيف كومار أغاروال؛ إم. ساراث كومار (2003). "مصححات الأخطاء للغات البرمجة". في واي إن سريكانت؛ بريتي شانكار (محرران). دليل تصميم المترجمات: التحسينات وتوليد كود الآلة . بوكا راتون، فلوريدا: مطبعة سي آر سي . الصفحات 295-327 . ISBN 978-0-8493-1240-3.
- جوناثان ب. روزنبرغ (1996). كيف تعمل أدوات تصحيح الأخطاء: الخوارزميات، وهياكل البيانات، والبنية . جون وايلي وأولاده . ISBN 0-471-14966-7.
روابط خارجية
- أدوات تصحيح الأخطاء
- تصحيح الأخطاء
- أنواع برامج الأدوات المساعدة
