معلومات تصحيح الأخطاء

معلومات تصحيح الأخطاء هي معلومات تصف تطابق عناصر في شفرة المصدر ، مثل أسماء المتغيرات والإجراءات، مع الكيانات في شفرة الكائن ، الموجودة في ملف كائن ، مثل مكتبة مشتركة أو ملف تنفيذي . يتيح هذا النوع من المعلومات لمصحح الأخطاء الرمزي توفير تجربة تصحيح أخطاء أقرب إلى شفرة المصدر.

قد يتم تجميع معلومات تصحيح الأخطاء مع الملف الثنائي للوحدة ، أو توزيعها في ملف منفصل، أو ببساطة تجاهلها أثناء التجميع و/أو الربط .

لأن هذه المعلومات كانت تاريخياً مرتبطة بجدول الرموز (الذي كان يُستخدم أصلاً لترجمة أسماء المعرفات المُصدّرة إلى مواقعها في ملف الكائن)، فقد عُرفت أيضاً باسم " رموز التصحيح" . مع ذلك، فإن معظم معلومات التصحيح اليوم موجودة خارج جدول الرموز، مما يجعل هذه التسمية غير دقيقة إلى حد كبير.

قد تكون هذه المعلومات مفيدة عند محاولة التحقيق في عطل تطبيق ما أو أي خلل آخر وإصلاحه . [ 1 ] كما تُستخدم أيضًا لتوفير نظرة عامة على بنية البرنامج عند إجراء الهندسة العكسية .

معلومات تصحيح الأخطاء

يمكن تقسيم رموز تصحيح الأخطاء إلى عدة مستويات:

  1. تُوفّر المعلومات عادةً من خلال جدول الرموز ، وهو عبارة عن ترجمة من الأسماء إلى العناوين. بالنسبة للمكتبات الديناميكية، يجب أن يتضمن جدول الرموز مواقع الدوال والمتغيرات العامة التي تتوقعها البرامج الأخرى لاستخدامها، وإلا ستكون هذه "الصادرات" غير متاحة.
  2. المعلومات الضرورية لميزات أخرى مثل فحص النوع (بما في ذلك معلومات النوع في وقت التشغيل ) والانعكاس .
  3. معلومات إضافية اختيارية، والتي قد تشمل ما يلي:
    1. ملف الكود المصدري الذي يظهر فيه الرمز، بالإضافة إلى رقم السطر الذي تم تعريفه فيه.
    2. نوع البيانات وحجم الرمز.
    3. بالنسبة للأنواع المخصصة مثل الهياكل والفئات، أسمائها وطرقها وأعضائها.
    4. الرموز المحلية، وعادة ما تكون عبارة عن تعيين من اسم متغير إلى سجل أو موقع ذاكرة، وعمرها ونطاقها ( نطاق الكتلة أو النطاق العام ).
    5. معلومات حول أطر الاستثناء.
    6. الكود المصدري نفسه (الموجود في DWARF 5 و ADATA من §  OS/390 وما إلى ذلك ).

يمكن تخزين المعلومات من النوع (3) في جدول الرموز الخاص بملف الكائن (بما في ذلك الملف التنفيذي أو المكتبة المشتركة)، أو في ملف منفصل. أما الأنواع الأخرى فهي ضرورية لعمل الميزات غير المتعلقة بتصحيح الأخطاء، وعادةً ما تبقى ضمن ملف الكائن.

قد تشغل معلومات تصحيح الأخطاء مساحة كبيرة، لا سيما أسماء الملفات وأرقام الأسطر. لذا، قد تصبح الملفات التنفيذية التي تحتوي على معلومات تصحيح الأخطاء كبيرة جدًا، وغالبًا ما تفوق حجم الملف المُجرّد (الذي أُزيلت منه الرموز ومعلومات تصحيح الأخطاء الأخرى) بعدة مرات. [ 2 ] لتجنب هذا الحجم الزائد، تُرفق معظم توزيعات أنظمة التشغيل ملفات تنفيذية مُجرّدة، أي أُزيلت منها جميع رموز تصحيح الأخطاء (النوع (3)). ويتم ذلك، على سبيل المثال، باستخدام الأمر strip في أنظمة يونكس . إذا كانت معلومات تصحيح الأخطاء موجودة في ملفات منفصلة، ​​فعادةً لا تُرفق هذه الملفات مع التوزيعة، ويتم جلبها فقط عند الحاجة.

يحذف الأمر strip المعلومات من النوعين (1) و(3) فقط ، مع العلم أن حذف النوع الأول ليس دائمًا كاملًا، إذ قد يُطلب منه أيضًا الاحتفاظ بالرموز الضرورية لمعالجة إعادة التوطين ( )، والتي غالبًا ما توجد في مكتبة ديناميكية. قد يتطلب الأمر تغيير إعدادات المُصرّف لإزالة المعلومات بشكل كامل: على سبيل المثال، تؤثر رؤية الرموز بشكل مباشر على حجم جدول الرموز (1)، كما أن تفعيل RTTI في لغة C++ يحدد ما إذا كان سيتم إنتاج (2). [ 3 ]--strip-unneeded

الرموز المضمنة

أنظمة شبيهة بنظام يونكس

كان برنامج stabs صيغةً مبكرةً لتصحيح رموز الأخطاء في الأنظمة الشبيهة بنظام يونكس . وقد عمل عن طريق ترميز معلومات إضافية في جدول الرموز كسلاسل نصية منسقة بشكل خاص، وهو قابل للتطبيق على نطاق واسع على العديد من تنسيقات ملفات الكائنات.

حلّت صيغة DWARF الأحدث ، والتي توجد لها مواصفات رسمية، محلّ الصيغة القديمة إلى حد كبير. تسمح هذه المواصفات لأي مُصرّف أو مُجمّع متوافق بإنشاء رموز تصحيح الأخطاء بصيغة موحدة، كما تسمح لأي مُصحّح أخطاء، مثل مُصحّح أخطاء GNU (GDB)، بالوصول إلى هذه الرموز وعرضها. يُمكن استخدام DWARF مع أي صيغة كائنات تتضمن مفهوم الأقسام المُسماة.

نظام التشغيل IBM OS/360 والأنظمة اللاحقة له

تتضمن مُجمِّعات البرامج لأنظمة IBM الرئيسية المُشتقة من System/360 خيار TEST الذي يُتيح للمُجمِّع تضمين معلومات تصحيح الأخطاء [ 4 ] [ 5 ] [ 6 ] في ملف الكائن. وبالمثل، يحتوي مُحرِّرا الربط والربط على خيار TEST الذي يُتيح الاحتفاظ بمعلومات تصحيح الأخطاء [ 7 ] في وحدة التحميل. وتتمتع أدوات تصحيح الأخطاء المختلفة، مثل OS/360 TESTRAN و TSO TEST، بالقدرة على استخدام تعريفات الرموز المُضمَّنة.

يدعم برنامج التجميع عالي المستوى من IBM (HLASM) تنسيق ملف الكائن المعمم ( GOFF )، والذي يتضمن ADATA المضمنة .

ويندوز

يمكن لبيئة ويندوز PE/COFF استخدام تنسيق CodeView المضمن، مع أن هذه المعلومات تُستخرج عادةً إلى ملف PDB منفصل في برامج الإنتاج (انظر أدناه). كما يمكن لـ PE/COFF استخدام تنسيق معلومات تصحيح الأخطاء COFF القديم. [ 8 ]

في مجموعات أدوات GNU، يُستخدم DWARF في PE/COFF. ويمكن أيضًا استخراج هذه المعلومات إلى ملف PDB باستخدام cv2pdb .

التنسيقات القديمة

  • تنسيق وحدة الكائن القابل للنقل (OMF) لـ Intel x86، ملفات .OBJ على DOS: معلومات تصحيح الأخطاء مشفرة على شكل "تعليقات" (قديمة) [ 9 ]
  • IEEE-695 : تنسيق قديم يُستخدم على معالج Z80 . يستخدم حقول "التعليق". [ 10 ] [ 11 ]
  • COFF : كان أحد خلفاء OMF، ويحتوي على مزيج من جداول الرموز (للمعرفات) والتعليقات التوضيحية في مقطع النص (للحصول على معلومات أكثر تقدماً).

ملفات تصحيح الأخطاء الخارجية

OS/390 وآخرون

يحتوي مُجمِّع IBM عالي المستوى (HLASM) وغيره من المُجمِّعات التي تعمل على أنظمة تشغيل مثل z/OS ، على خيار ADATA الذي يُنتج ملف بيانات مُرتبطة (ADATA) [ 12 ] يحتوي على معلومات أكثر من تلك التي يُنتجها خيار TEST القديم. ويشمل ملف ADATA على وجه الخصوص أسطرًا من التعليمات البرمجية المصدرية وبياناتها الوصفية.

رموز تصحيح الأخطاء من مايكروسوفت

تُنشئ مُجمّعات مايكروسوفت ملف قاعدة بيانات البرامج (PDB) الذي يحتوي على رموز تصحيح الأخطاء. تُرفق بعض الشركات ملف PDB على أقراصها المدمجة (CD/DVD) لتسهيل استكشاف الأخطاء وإصلاحها، بينما تسمح شركات أخرى (مثل مايكروسوفت وموزيلا ) بتنزيل رموز تصحيح الأخطاء من الإنترنت. يُمكن تهيئة مُصحّح الأخطاء WinDbg وبيئة التطوير المتكاملة Visual Studio لتنزيل رموز تصحيح الأخطاء تلقائيًا لمكتبات الارتباط الديناميكي (DLL) الخاصة بنظام ويندوز عند الطلب. تتضمن رموز تصحيح الأخطاء في ملف PDB الذي تُوزّعه مايكروسوفت الدوال العامة والمتغيرات العامة وأنواع بياناتها فقط. تمتلك موزيلا بنية تحتية مماثلة، لكنها تُوزّع معلومات تصحيح الأخطاء كاملةً.

يوجد فرعان لتنسيق ملفات PDB لملفات PE/COFF (exe، dll). يُستخدم التنسيق المغلق للملفات التي تحتوي على تعليمات برمجية عادية. أما التنسيق المفتوح فيُستخدم للملفات التي تحتوي على تعليمات برمجية بلغة .NET.

أنظمة شبيهة بنظام يونكس

يمكن إصدار أو استخراج بيانات DWARF إلى ملف كائن بدون كود، والذي يعمل كملف منفصل لمعلومات تصحيح الأخطاء. في أنظمة لينكس، يتم توفير خدمة البحث بواسطة debuginfod...

في منصات أبل ، تُصدر رموز التصحيح اختيارياً أثناء عملية البناء كملفات dSYM ، وهي عبارة عن حزم تحتوي على ملف Mach-O بدون أي كود برمجي ولكن مع رموز التصحيح. تستخدم أبل مصطلح "النسخ الرمزي" للإشارة إلى استبدال العناوين في ملفات التشخيص بقيم قابلة للقراءة البشرية. [ 13 ]

في سياقات غير لغة الآلة

يؤدي تصغير حجم الكود المصدري إلى جعله غير قابل للقراءة. وتؤدي خريطة المصدر ، التي تتضمن ربطًا بين الكيانات المصغرة والكيانات الأصلية في الكود المصدري، وظيفة توفير معلومات تصحيح الأخطاء.

يمكن أن تحتوي تنسيقات بايت كود مثل بايت كود جافا و.NET على كميات مختلفة من معلومات تصحيح الأخطاء أيضًا. [ 14 ]

تاريخ

ظهرت أدوات تصحيح الأخطاء الرمزية منذ عصر الحواسيب المركزية ، تقريبًا منذ ظهور شاشات العرض المناسبة لعرض معلومات تصحيح الأخطاء الرمزية (بل وحتى قبل ذلك مع استخدام ملفات تفريغ الذاكرة الرمزية على الورق). لم تقتصر هذه الأدوات على لغات البرمجة عالية المستوى، بل كانت متاحة أيضًا لبرامج لغة التجميع . بالنسبة لجهاز IBM/360 ، كانت هذه الأدوات تُنتج رمزًا تنفيذيًا (عند الطلب) يتضمن "بطاقات SYM". عادةً ما كان مُحمِّل البرامج يتجاهل هذه البطاقات، لكنها كانت مفيدة لأداة تصحيح الأخطاء الرمزية لأنها كانت تُحفظ في مكتبة البرنامج نفسها التي تحتوي على رمز المنطق القابل للتنفيذ.

انظر أيضاً

مراجع

  1. "تصحيح الأخطاء باستخدام الرموز" . مركز مطوري ويندوز . مايكروسوفت . مؤرشف من الأصل بتاريخ 11 يناير 2020. تم الاطلاع عليه بتاريخ 11 يناير 2020 .
  2. "ما فائدة الرموز؟" . TechNet . Microsoft . 2008-07-15. مؤرشف من الأصل في 2014-12-26 . تم الاطلاع عليه في 2015-01-04 .
  3. "الأحجام الثنائية و RTTI" . مدونة ساندور دارجو . 2023-03-01.
  4. "الملحق د: تنسيقات سجلات إدخال محرر TESTRAN" (ملف PDF) . نظام التشغيل IBM System/360 - TESTRAN - دليل منطق البرنامج - رقم البرنامج 3605-PT-516 (ملف PDF) . TNL GN26-8016. IBM . 1971-04-01. الصفحات 119-120 . GY28-6611-0 . تاريخ الاسترجاع 2024-07-11 . 
  5. "الملحق. اصطلاحات الإدخال وتنسيقات السجلات" (ملف PDF) . MVS/370 - منطق محرر الربط - منتج مرفق البيانات 5665-295 - الإصدار 1.0 (ملف PDF) (الطبعة الأولى ). IBM . أبريل 1983. الصفحات 195-206 . LY26-3921-0 . تاريخ الاسترجاع: 11 يوليو 2024 .  
  6. LY26-3921-0 ، ص 195 ، الشكل 69. سجل إدخال SYM (صورة البطاقة) .
  7. LY26-3921-0 ، ص 199 ، الشكل 76. سجل SYM (وحدة التحميل) .
  8. "داخل نظام ويندوز: نظرة متعمقة على تنسيق ملف Win32 القابل للتنفيذ، الجزء 2" . learn.microsoft.com .
  9. "OMF: تنسيق وحدة الكائن القابلة للنقل" (PDF) .
  10. "تنسيق ملف الكائن IEEE-695" .
  11. "فك شفرة تنسيق ملف LOD الخاص بـ Zilog" . www.cocoacrumbs.com . 2023-01-01.
  12. "الملحق ج. مخرجات ملف البيانات المرتبط" (ملف PDF) . مُجمِّع عالي المستوى لأنظمة z/OS و z/VM و z/VSE - دليل المبرمج - الإصدار 1، الإصدار 6 (ملف PDF) . شركة IBM . 2015. الصفحات 227-275 . SC26-4941-07 . تاريخ الاسترجاع: 11 يوليو 2024 . 
  13. "فهم وتحليل تقارير أعطال تطبيقات iOS" . مكتبة مطوري iOS . شركة Apple، 8 يناير 2018 [29 يناير 2009]. ملاحظة فنية TN2151. مؤرشفة من الأصل في 19 ديسمبر 2019. تم الاطلاع عليها في 11 يناير 2020 .
  14. "نظرة معمقة على جافا - تنسيق ملف الفئة لمعلومات التصحيح" . synyx.de (بالألمانية). 14-03-2019.