تصحيح أخطاء C/C++ WebAssembly

Sofia Emelianova
Sofia Emelianova

يقدّم WebAssembly طريقة لتشغيل رمز C/C++ على الويب بسرعة قريبة من السرعة الأصلية إلى جانب JavaScript. يوضّح هذا المستند كيفية إعداد أدوات مطوّري البرامج في Chrome واستخدامها لتصحيح أخطاء هذه التطبيقات بشكلٍ أفضل.

بعد إعداد أدوات مطوّري البرامج، يمكنك إجراء ما يلي:

  • تحقّق من الرمز الأصلي في المصادر > المحرِّر.
  • يمكنك إيقاف التنفيذ مؤقتًا باستخدام نقاط التوقف في سطر الرمز البرمجي والانتقال من خلال رمز المصدر الأصلي لـ C/C++، وليس الملف الثنائي .wasm المجمّع.

ويمكنك إجراء ما يلي أثناء إيقاف الفيديو مؤقتًا:

  • مرِّر مؤشر الماوس فوق المتغيّرات في ملف المصدر الأصلي واطّلِع على قيمها.
  • فهم أسماء الدوالّ في تسلسل الاستدعاء والمتغيّرات في النطاق
  • عرض المواقع المضمّنة بعمق والكائنات المعقدة في وحدة التحكّم
  • فحص ذاكرة العناصر باستخدام أداة فحص الذاكرة

إعداد

لتفعيل تصحيح أخطاء WebAssembly باستخدام C/C++ في "أدوات مطوّري البرامج"، اتّبِع الخطوات التالية:

  1. اجمع تطبيقك مع تضمين معلومات تصحيح الأخطاء DWARF. شغِّل أحدث إصدار من مُجمِّع Emscripten وأدخِل العلامة -g. على سبيل المثال:

    emcc -g source.cc -o app.html
    

    لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء المشاريع باستخدام معلومات تصحيح الأخطاء.

  2. ثبِّت إضافة Chrome لدعم أدوات المطوّرين (DWARF) في C/C++.

تصحيح الأخطاء

بعد إعداد "أدوات مطوّري البرامج"، يمكنك تصحيح أخطاء الرمز البرمجي:

  1. افتح "أدوات مطوّري البرامج" لفحص موقعك الإلكتروني. في هذا الدليل التعليمي، يمكنك تجربته على هذه الصفحة التجريبية التي تم تجميعها باستخدام العلامة -g المطلوبة.
  2. يمكنك اختياريًا تجميع الملفات التي أنشأتها لتسهيل التنقّل. في المصادر، ضَع علامة في المربّع قائمة الخيارات الإضافية > الصفحة > مربّع اختيار > التجميع حسب المؤلف/النشر تجريبية..
  3. اختَر ملف المصدر الأصلي من شجرة الملفات. في هذه الحالة، mandelbrot.cc.
  4. لضبط نقطة توقّف لسطر تعليمات برمجية، انقر على رقم سطر في العمود على يمين المحرِّر، على سبيل المثال، في السطر 38.

    تم ضبط نقطة فاصلة لسطر رمز في السطر 38.

  5. شغِّل الرمز البرمجي مرة أخرى. يتوقّف التنفيذ مؤقتًا قبل السطر الذي يتضمّن نقطة التوقف.

أثناء إيقاف الفيديو مؤقتًا، جرِّب ما يلي:

  • في المصادر > المحرِّر، مرِّر مؤشر الماوس فوق متغيّر للاطّلاع على قيمته في تلميح.

قيمة متغيّر في تلميح توضيحي

  • في المصادر > تسلسل الاستدعاء، اطّلِع على أسماء الدوال كما هي في المصدر.

الوظيفة الرئيسية في تسلسل استدعاء الدوال البرمجية

  • في المصادر > النطاق، اطّلِع على المتغيّرات المحلية والعالمية وأنواعها وقيمها.

لوحة "النطاق" التي تتضمّن المتغيّرات المحلية وقيمها

  • في وحدة التحكّم، يمكنك عرض المتغيّرات والعناصر التي يصعب الانتقال إليها في النطاق:

    • المتغيّرات المتداخلة بشدة، مثل العناصر المفهرَسة في صفائف كبيرة
    • الأجسام المعقّدة، بما في ذلك تلك التي يمكنك الوصول إليها باستخدام المؤشرات (->). يمكنك توسيعها لفحصها.

متغيّر مُدمَج وعنصر معقّد تم توسيعه في وحدة التحكّم

  • في المصادر > النطاق، انقر على الرمز الذاكرة لفتح أداة فحص الذاكرة وفحص وحدات البايت الأوّلية لذاكرة العناصر. لمزيد من المعلومات، يُرجى الاطّلاع على فحص ذاكرة WebAssembly.

فحص ذاكرة متغيّر

أداء الملف التجاري

عند إعداد "أدوات مطوّري البرامج" وفتحها، لا يتم تحسين الرمز الذي يُشغّله Chrome. تم تصغير حجمه لمنحك تجربة تصحيح أخطاء أفضل.

في هذه الحالة، لا يمكنك الاعتماد على console.time() وperformance.now() في الرمز البرمجي لتقييم الأداء. بدلاً من ذلك، استخدِم لوحة الأداء لإنشاء الملفات التعريفية.

بدلاً من ذلك، يمكنك تشغيل رمز وضع ال profiling بدون فتح "أدوات المطوّرين"، ثم فتحها لفحص الرسائل في وحدة التحكّم.

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

لتسريع عملية التحميل مع الحفاظ على تجربة تصحيح أخطاء أفضل، يمكنك تقسيم معلومات تصحيح الأخطاء إلى ملف .wasm منفصل. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تصحيح أخطاء WebAssembly بشكل أسرع.

يمكنك الاحتفاظ بهذا الملف على الجهاز أو استضافته على خادم منفصل. لتنفيذ ذلك باستخدام Emscripten، عليك تمرير العلامة -gseparate-dwarf=<filename> وتحديد مسار الملف:

emcc -g source.cc -o app.html \
     -gseparate-dwarf=temp.debug.wasm \
     -s SEPARATE_DWARF_URL=[file://local/path/to/temp.debug.wasm] | [URL]

إنشاء التطبيقات وتصحيح الأخطاء عليها على أجهزة مختلفة

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

على سبيل المثال، إذا كان مشروعك في C:\src\project على الجهاز ولكن تم إنشاؤه في حاوية Docker باستخدام المسار /mnt/c/src/project، اتّبِع الخطوات التالية:

  1. انتقِل إلى chrome://extensions/، وابحث عن إضافة C/C++ DevTools Support (DWARF)، ثم انقر على التفاصيل > خيارات الإضافة.
  2. حدِّد مسارَي الملف القديم والجديد.

مسارات الملفات القديمة والجديدة المحدّدة

مزيد من المعلومات

يمكنك الاطّلاع على مدوّنة فريق هندسة "أدوات مطوّري البرامج في Chrome" للحصول على مزيد من المعلومات عن تصحيح أخطاء WebAssembly: