تحسين تصحيح أخطاء WebAssembly في "أدوات مطوري البرامج في Chrome"

Ingvar Stepanyan
Ingvar Stepanyan

الخلفية

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

لقطة شاشة لدعم تصحيح أخطاء WebAssembly المحدود سابقًا في 
            Chrome DevTools

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

حل بديل مؤقت

لحلّ هذه المشكلة، عدّل كلّ من Emscripten وأدوات المطوّرين مؤقتًا تنسيق خرائط المصادر الحالي إلى WebAssembly. وقد سمح ذلك بعمليات الربط بين الموضع الثنائي في الوحدة المجمّعة والمواقع الأصلية في الملفات المصدر.

لقطة شاشة لعملية تصحيح الأخطاء المستندة إلى خرائط المصادر

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

إدخال DWARF

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

على الرغم من أنّه لا تزال هناك بعض الميزات الخاصة بـ WebAssembly والتي يجب إضافتها لتحقيق التوافق الكامل، فإنّ برامج التجميع مثل Clang وRust تتيح إطلاق معلومات DWARF في وحدات WebAssembly، ما أتاح لفريق DevTools بدء استخدامها مباشرةً في "أدوات مطوري البرامج".

كخطوة أولى، تتيح أدوات مطوّري البرامج الآن ربط المصادر الأصلية باستخدام هذه المعلومات، ما يتيح لك بدء تصحيح أخطاء وحدات Wasm التي تم إنشاؤها بواسطة أي من برامج التحويل البرمجي بدون اللجوء إلى التنسيق المفكَّك أو استخدام أي نصوص برمجية مخصَّصة.

بدلاً من ذلك، ما عليك سوى توجيه المُجمِّع إلى تضمين معلومات تصحيح الأخطاء كما تفعل عادةً على الأنظمة الأساسية الأخرى. على سبيل المثال، في Clang وEmscripten، يمكن إجراء ذلك من خلال تمرير علامة -g أثناء عملية الترجمة:

  clang -g …sources… -target wasm32 -o out.wasm

  emcc -g …sources… -o out.js

يمكنك استخدام العلامة -g نفسها في Rust:

  rustc -g source.rs --target wasm32-unknown-unknown -o out.wasm

أو إذا كنت تستخدم Cargo، سيتم تضمين معلومات تصحيح الأخطاء تلقائيًا:

  cargo build --target wasm32-unknown-unknown

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

لقطة شاشة لعملية تصحيح الأخطاء الجديدة المستندة إلى DWARF

المستقبل

لا يزال هناك الكثير من العمل الذي يجب القيام به. على سبيل المثال، من جهة الأدوات، لا يتيح Emscripten (Binaryen) و wasm-pack (wasm-bindgen) تعديل معلومات DWARF حول عمليات التحويل التي يُجريها بعد. ولن يستفيدوا من هذا الدمج في الوقت الحالي.

من جانب Chrome DevTools، سنطوّر عملية الدمج بشكل أكبر بمرور الوقت لضمان تجربة تصحيح أخطاء سلسة، بما في ذلك:

  • حلّ أسماء المتغيّرات
  • أنواع الطباعة بتنسيق محسّن
  • تقييم التعبيرات باللغات المصدر
  • …وغير ذلك الكثير

يُرجى متابعتنا لمعرفة آخر الأخبار.

تنزيل قنوات المعاينة

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

التواصل مع فريق "أدوات مطوري البرامج في Chrome"

استخدِم الخيارات التالية لمناقشة الميزات الجديدة أو التحديثات أو أي شيء آخر مرتبط بـ "أدوات مطوّري البرامج".