ניפוי באגים משופר ב-WebAssembly בכלי הפיתוח ל-Chrome

Ingvar Stepanyan
Ingvar Stepanyan

רקע

עד לאחרונה, ניפוי הבאגים היחיד ב-WebAssembly שנתמך בכלי הפיתוח ל-Chrome היה צפייה דוחות קריסות גולמיים של WebAssembly, ופירוט של הוראות בודדות בפורמט טקסט WebAssembly מפוצל.

צילום מסך של התמיכה בניפוי באגים ב-WebAssembly שהייתה מוגבלת בעבר ב- 
            כלי פיתוח ל-Chrome.

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

פתרון זמני

כדי לפתור את הבעיה, Emscripten וכלי הפיתוח התאימו באופן זמני את המודלים הקיימים בפורמט מפות מקור ל-WebAssembly. המיפויים המותרים בין היסטים בינאריים במודול המורכב ממיקומים מקוריים בקובצי מקור.

צילום מסך של ניפוי הבאגים שמבוסס על מפות המקור.

עם זאת, מפות המקור תוכננו לפורמטים של טקסט עם מיפויים ברורים למושגים ולערכים של JavaScript, ולא לפורמטים בינאריים כמו WebAssembly עם שפות מקור שרירותיות, מערכות טיפוס וזיכרון ליניארי. כתוצאה מכך, השילוב היה פריך, מוגבל ולא נתמך באופן נרחב מחוץ ל-Emscripten.

כניסה ל-DWARF

מצד שני, לשפות אם רבות יש כבר פורמט נפוץ לניפוי באגים, DWARF, שמספק את כל המידע הנדרש לכלי לניפוי באגים כדי שיוכלו לפענח מיקומים, שמות משתנים, פריסות של סוגים ועוד.

יש עדיין כמה תכונות ספציפיות ל-WebAssembly שצריך להוסיף כדי להשיג תאימות מלאה, אבל מהדרים כמו Clang ו-Rust כבר תומכים בפליטת נתוני DWARF במודולים של WebAssembly, כך שצוות כלי הפיתוח יכול להתחיל להשתמש בהם ישירות בכלי הפיתוח.

בשלב הראשון, כלי הפיתוח תומכים במיפוי מקורות נייטיב באמצעות המידע הזה, כך שתוכלו להתחיל לנפות באגים במודולים של Wasm שנוצרו על ידי כל אחד מהמהדרים האלה, בלי להשתמש בפורמט המורכב או להשתמש בסקריפטים מותאמים אישית.

במקום זאת, צריך רק להנחות את המהדר לכלול מידע על ניפוי באגים, כמו שבדרך כלל עושים בפלטפורמות אחרות. לדוגמה, ב-Clang וב-Emscripten ניתן לעשות זאת על ידי העברת דגל -g במהלך compilation:

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

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

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

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