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

Ingvar Stepanyan
Ingvar Stepanyan

الخلفية

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

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

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

الحلّ البديل المؤقت

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

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

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

الدخول إلى DWARF

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

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

كخطوة أولى، أصبحت أدوات مطوّري البرامج متوافقة الآن مع تعيين المصدر الأصلي باستخدام هذه المعلومات، ما يتيح لك البدء في تصحيح أخطاء وحدات 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 (swm-bindgen) تعديل معلومات DWARF بشأن عمليات التحويل التي نفّذتها. في الوقت الحالي، لن يستفيد من هذا الدمج.

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

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

ترقَّب المزيد من الميزات في المستقبل.

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

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

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

يُرجى استخدام الخيارات التالية لمناقشة الميزات والتغييرات الجديدة في المشاركة أو أي موضوع آخر ذي صلة بـ "أدوات مطوري البرامج".

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