ניפוי באגים משופר ב-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 וב-Empscripten אפשר לעשות זאת על ידי העברת דגל -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 כבר כולל תמיכה במעבר על הקוד, הגדרת נקודות עצירה (breakpoint) ופתרון דוחות קריסות בשפות המקור שלכם.

צילום מסך של ניפוי הבאגים החדש שמופעל על ידי DWARF.

העתיד

עם זאת, יש עדיין לא מעט עבודה לעשות. לדוגמה, מבחינת הכלים, Emscripten (Binaryen) ו- Wasm-pack (wasm-bindgen) לא תומכים עדיין בעדכון פרטי DWARF לגבי טרנספורמציות שהם מבצעים. נכון לעכשיו, הם לא יוכלו להפיק תועלת מהשילוב הזה.

בצד של כלי הפיתוח ל-Chrome, נרחיב את השילוב עם הזמן כדי להבטיח חוויית ניפוי באגים חלקה, כולל:

  • פתרון שמות של משתנים
  • סוגים יפים של הדפסה
  • הערכת ביטויים בשפות מקור
  • ...ועוד הרבה יותר.

כדאי להמשיך להתעדכן.

הורדת הערוצים של התצוגה המקדימה

כדאי להשתמש ב-Chrome Canary, Dev או Beta כדפדפן הפיתוח בברירת מחדל. ערוצי התצוגה המקדימה האלה נותנים לך גישה לתכונות החדשות של כלי הפיתוח, בודקים ממשקי API מתקדמים של פלטפורמת האינטרנט ומוצאים בעיות באתר לפני שהמשתמשים יגלו אותן!

יצירת קשר עם צוות כלי הפיתוח ל-Chrome

אפשר להשתמש באפשרויות הבאות כדי לדון בתכונות החדשות ובשינויים בפוסט, או בכל דבר אחר שקשור לכלי הפיתוח.

  • שלחו לנו הצעה או משוב דרך crbug.com.
  • כדי לדווח על בעיה בכלי הפיתוח, לוחצים על אפשרויות נוספות   עוד   > עזרה > דיווח על בעיות בכלי הפיתוח בכלי הפיתוח.
  • אפשר לשלוח ציוץ אל @ChromeDevTools.
  • אפשר לכתוב תגובות לגבי 'מה חדש' בסרטוני YouTube בכלי הפיתוח או בסרטונים ב-YouTube בקטע 'טיפים לשימוש בכלי הפיתוח'.