الخلفية
حتى وقت قريب، كانت ميزة تصحيح أخطاء WebAssembly الوحيدة التي تتيحها "أدوات مطوّري البرامج في Chrome" هي عرض تتبُّع تسلسل استدعاء الدوال البرمجية لـ WebAssembly الأوّلي، والتخطّي عن التعليمات الفردية في ملف نصي مُجمَّع لـ WebAssembly.
علمًا أنّ هذه الطريقة تعمل مع أي وحدة 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 إمكانية التنقّل فوق الرمز البرمجي وضبط نقاط التوقف وحلّ عمليات تتبُّع تسلسل استدعاء الدوال البرمجية في لغات المصدر.
المستقبل
لا يزال هناك الكثير من العمل الذي يجب القيام به.
على سبيل المثال، من جهة الأدوات، لا يتيح Emscripten (Binaryen) و wasm-pack (wasm-bindgen) تعديل معلومات DWARF حول عمليات التحويل التي يُجريها بعد. ولن يستفيدوا من هذا الدمج في الوقت الحالي.
من جانب Chrome DevTools، سنطوّر عملية الدمج بشكل أكبر بمرور الوقت لضمان تجربة تصحيح أخطاء سلسة، بما في ذلك:
- حلّ أسماء المتغيّرات
- أنواع الطباعة بتنسيق محسّن
- تقييم التعبيرات باللغات المصدر
- …وغير ذلك الكثير
يُرجى متابعتنا لمعرفة آخر الأخبار.
تنزيل قنوات المعاينة
يمكنك استخدام Chrome كناري، أو إصدار مطوّري البرامج، أو الإصدار التجريبي، كمتصفِّح التطوير التلقائي. تتيح لك قنوات المعاينة هذه الوصول إلى أحدث ميزات DevTools، وتتيح لك اختبار واجهات برمجة تطبيقات منصات الويب المتطوّرة، وتساعدك في العثور على المشاكل في موقعك الإلكتروني قبل أن يعثر عليها المستخدمون.
التواصل مع فريق "أدوات مطوري البرامج في Chrome"
استخدِم الخيارات التالية لمناقشة الميزات الجديدة أو التحديثات أو أي شيء آخر مرتبط بـ "أدوات مطوّري البرامج".
- يمكنك إرسال الملاحظات وطلبات الميزات إلينا على crbug.com.
- يمكنك الإبلاغ عن مشكلة في "أدوات مطوّري البرامج" باستخدام رمز خيارات إضافية > مساعدة > الإبلاغ عن مشكلة في "أدوات مطوّري البرامج" في "أدوات مطوّري البرامج".
- يمكنك نشر تغريدة على @ChromeDevTools.
- يمكنك إضافة تعليقات على فيديوهات YouTube التي تعرض الميزات الجديدة في "أدوات مطوّري البرامج" أو فيديوهات YouTube التي تعرض نصائح حول "أدوات مطوّري البرامج".