تحسين تصحيح أخطاء 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 ببدء استخدامها مباشرةً في 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، سنطوّر عملية الدمج بشكل أكبر بمرور الوقت لضمان تجربة تصحيح أخطاء سلسة، بما في ذلك:

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

ننصحك بمتابعتنا لمعرفة آخر الأخبار في المستقبل.

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

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

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

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