דלג לתוכן הראשי

דיאגנוסטיקה של שגיאות

הקומפיילר של Wave מציג את השגיאות עם קוד (E####) יחד עם מיקום מקור/הקשר/טיפים לפתרון.

פורמט פלט

העיצוב הבסיסי הוא כדלקמן.

error[E3001]: semantic validation failed: שימוש במזהה לא מוצהר `x`
--> file.wave:2:18
1 | fun main() {
2 | println("{}", x);
| ^ לא נמצא בטווח זה
= הקשר: בדיקת תוקף סמנטי
= עזרה: תקן בעיות בהתאמה, טווח, ותוקף ביטוי.

פריטי פלט:

  • error[E....]: קוד שגיאה ותמצית
  • --> קובץ:שורה:טור: מיקום הבעיה
  • בלוק מקור + סימון caret (^) מודגש
  • הקשר, צפוי, נמצא, הערה, עזרה, הצעה

קוד שגיאה מייצג

  • E1001 תו לא צפוי
  • E1002 הערת בלוק לא סגורה
  • E1003 מחרוזת לא סגורה
  • E1004 תו escape לא חוקי
  • E1005 ליטרל תו לא חוקי
  • E1006 פורמט ליטרל מספר לא חוקי
  • E2001 שגיאת תחביר של המפענח
  • E3001 שגיאת אימות סמנטי
  • E3102 השמה של null לאובייקט שאינו מצביע
  • E3201 צמצום מספרי שלם בלתי מפורש אסור
  • E9001 שגיאה פנימית ביצירת קוד בגיבוי

גם בשגיאת גיבוי מוצגת מיקום מקור

בשלב יצירת הקוד (LLVM), גם במקרים של panic פנימי, אם אפשרי, משוערת ומוצגת מיקום הקריאה/ההצהרה בפועל.

שגיאה[E9001]: שגיאה פנימית של מהדר בעת יצירת קוד (llvm-ir-generation)
--> test.wave:12:9
= נמצא: הפונקציה 'foo' לא נמצאה
= הערה: מיקום המקור משוער משם פונקציה לא פתור ב-panic בגיבוי

כשלא ניתן לשער את המיקום, נעשה שימוש במיקום fallback, והעובדה מוצגת ב-הערה.