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

Ingvar Stepanyan
Ingvar Stepanyan

الخلفية

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

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

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

حل بديل مؤقت

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

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

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

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

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

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

يمكنك استخدام الخيارات التالية لمناقشة الميزات والتغييرات الجديدة في المشاركة أو مناقشة أي معلومات أخرى متعلّقة بأدوات مطوري البرامج.

  • يمكنك إرسال اقتراح أو ملاحظات إلينا عبر crbug.com.
  • الإبلاغ عن مشكلة في "أدوات مطوري البرامج" باستخدام خيارات إضافية   المزيد > مساعدة > الإبلاغ عن مشاكل في "أدوات مطوري البرامج" في "أدوات مطوري البرامج"
  • يمكنك نشر تغريدة على @ChromeDevTools.
  • شارِك في التعليقات على الميزات الجديدة في فيديوهات YouTube أو نصائح حول أدوات مطوّري البرامج فيديوهات YouTube.