רקע
עד לאחרונה, ניפוי הבאגים היחיד ב-WebAssembly שנתמך בכלי הפיתוח ל-Chrome היה צפייה דוחות קריסות גולמיים של WebAssembly, ופירוט של הוראות בודדות בפורמט טקסט WebAssembly מפוצל.
האפשרות הזו עובדת עם כל מודול 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 כבר כולל תמיכה בצעדים מעל הקוד, בהגדרת נקודות עצירה ובפתרון של מעקב סטאק בשפות המקור שלכם.
העתיד
יש עדיין הרבה עבודה לעשות.
לדוגמה, בקיצורים, Emscripten (Binaryen) ו-Wasm-pack (wasm-bindgen) לא תומכים עדיין בעדכון פרטי DWARF לגבי טרנספורמציות שהם מבצעים. בשלב הזה, הם לא ייהנו מהשילוב הזה.
בצד הכלים למפתחים ב-Chrome, נמשיך לשפר את השילוב עם הזמן כדי להבטיח חוויית ניפוי באגים חלקה, כולל:
- פתרון של שמות של משתנים
- סוגי הדפסות יפות
- הערכת ביטויים בשפות מקור
- …ועוד הרבה יותר!
עדכונים נוספים יפורסמו בקרוב.
הורדת הערוצים של התצוגה המקדימה
כדאי להשתמש ב-Chrome Canary, Dev או בטא כדפדפן הפיתוח שמוגדר כברירת מחדל. ערוצי התצוגה המקדימה האלה מעניקים לכם גישה לתכונות העדכניות ביותר של DevTools, מאפשרים לכם לבדוק ממשקי API מתקדמים לפלטפורמות אינטרנט ולמצוא בעיות באתר לפני שהמשתמשים יעשו זאת.
יצירת קשר עם צוות כלי הפיתוח ל-Chrome
אפשר להשתמש באפשרויות הבאות כדי לדון בתכונות ובשינויים החדשים בפוסט, או בכל נושא אחר שקשור לכלי פיתוח.
- אפשר לשלוח לנו הצעה או משוב דרך crbug.com.
- כדי לדווח על בעיה בכלי הפיתוח, לוחצים על אפשרויות נוספות > עזרה > דיווח על בעיות בכלי הפיתוח ב'כלי פיתוח'.
- שליחת ציוץ אל @ChromeDevTools.
- אפשר להשאיר תגובות בסרטוני YouTube בנושא 'מה חדש בכלי הפיתוח' או בסרטוני YouTube בנושא 'טיפים לכלי הפיתוח'.