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

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

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

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

העתיד

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

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

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

עדכונים נוספים יפורסמו בקרוב.

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

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

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

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