גם מפתחים מנוסים ביותר כמעט אף פעם לא כותבים קוד בצורה נכונה בניסיון הראשון, ולכן פתרון בעיות הוא חלק חשוב בתהליך הפיתוח. בקטע הזה מוסברות שיטות למציאת שגיאות בסקריפטים, להבנתן ולניפוי באגים.
הודעות שגיאה
כשסקריפט נתקל בשגיאה, מופיעה הודעת שגיאה עם מספר שורה. יש שני סוגים בסיסיים של שגיאות: שגיאות תחביר ושגיאות זמן ריצה.
שגיאות תחביר
שגיאות תחביר מתרחשות כשהקוד לא פועל לפי הדקדוק של JavaScript, והן מתגלות כששומרים את הסקריפט. לדוגמה, בקטע הקוד הבא יש שגיאת תחביר:
function emailDataRow(rowNumber) {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var rowData = data[rowNumber-1].join(" ";
MailApp.sendEmail('john@example.com',
'Data in row ' + rowNumber,
rowData);
}
הבעיה היא שחסר התו ) בסוף השורה 4. כששומרים את הסקריפט, מופיעה השגיאה הבאה:
חסר התו ) אחרי רשימת הארגומנטים. (שורה 4)
השגיאות האלה מתגלות באופן מיידי, ולכן קל לפתור אותן. רק קוד תקין נשמר בפרויקט.
שגיאות זמן ריצה
שגיאות בזמן ריצה מתרחשות כשמשתמשים בפונקציה או במחלקה בצורה שגויה, והן מתגלות כשהסקריפט פועל. לדוגמה, הקוד הבא גורם לשגיאת זמן ריצה:
function emailDataRow(rowNumber) {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var rowData = data[rowNumber-1].join(" ");
MailApp.sendEmail('john',
'Data in row ' + rowNumber,
rowData);
}
הפורמט של הקוד תקין, אבל john היא כתובת אימייל לא תקינה. השגיאה הבאה מופיעה:
כתובת אימייל לא תקינה: john (שורה 5)
קשה לפתור את השגיאות האלה כי הנתונים נמשכים לרוב ממקורות חיצוניים כמו גיליונות אלקטרוניים או טפסים. כדאי להשתמש בטכניקות לניפוי באגים כדי לזהות את הסיבה.
שגיאות נפוצות
ריכזנו כאן רשימה של שגיאות נפוצות והסיבות להן.
השירות הופעל יותר מדי פעמים: <שם הפעולה>
השגיאה הזו מציינת שחרגתם מהמכסה היומית של פעולה מסוימת, כמו שליחת יותר מדי אימיילים. המכסות משתנות בהתאם לסוג החשבון, והן עשויות להשתנות. מידע נוסף על מגבלות זמין במסמכי התיעוד בנושא מכסות ב-Apps Script.
השרת לא זמין או אירעה שגיאת שרת. צריך לנסות שוב
סיבות אפשריות:
- שרת Google לא זמין באופן זמני. צריך להמתין ולנסות שוב.
- יש שגיאה בסקריפט שאין לה הודעה תואמת. כדאי לנסות לנפות באגים כדי לבודד את הבעיה.
- יש באג ב-Google Apps Script. חיפוש דוחות על באגים והגשת דוחות על באגים ב-Bugs.
נדרשת הרשאה כדי לבצע את הפעולה הזו.
לסקריפט אין את ההרשאה שנדרשת להפעלה. כשמריצים סקריפט מטריגר או כשירות, אי אפשר להציג תיבת דו-שיח של הרשאה.
כדי לאשר את הסקריפט, פותחים את הכלי לעריכת סקריפטים ומריצים פונקציה כלשהי. אם הסקריפט משתמש בשירותים חדשים שלא אושרו, צריך לאשר אותו מחדש.
לרוב, השגיאה הזו מתרחשת בגלל טריגרים שמופעלים לפני אישור או אחרי תפוגה. אם תוסף גורם לבעיה הזו, צריך להשתמש שוב בתוסף כדי לתת הרשאה מחדש. הסרת טריגרים בעייתיים:
- בפרויקט Apps Script, לוחצים על Triggers (טריגרים) .
- לצד הטריגר, לוחצים על סמל האפשרויות הנוספות > מחיקת הטריגר.
אפשר גם להסיר את התוסף.
הרשאות מפורטות יכולות גם לגרום לשגיאות האלה. כדי להגן על הפעלות של טריגרים, אפשר לעיין בדף היקפי ההרשאה.
הגישה נדחתה: DriveApp או מדיניות הדומיין השביתה אפליקציות Drive של צד שלישי
אדמינים ב-Google Workspace יכולים להשבית את Drive API בדומיין שלהם, וכך למנוע מהמשתמשים להשתמש באפליקציות של Drive או בתוספים של Apps Script שמשתמשים בשירות Drive.
אם תוסף או אפליקציית אינטרנט מתפרסמים להתקנה בכל הדומיין ומוגדרים על ידי אדמין, הסקריפט פועל גם אם Drive API מושבת.
לסקריפט אין הרשאה לקבל את זהות המשתמש הפעיל.
הזהות וכתובת האימייל של המשתמש הפעיל לא זמינות. השגיאה הזו מתרחשת כתוצאה מקריאות אל Session.getActiveUser() או אל Session.getEffectiveUser() במצבי הרשאה שאינם AuthMode.FULL.
אם הסקריפט מופעל על ידי טריגר, אפשר למצוא את מצב ההרשאה במאפיין authMode של אובייקט האירוע ב-Apps Script.
כדי לפתור את הבעיה, צריך לבדוק את מצב ההרשאה:
- ב-
AuthMode.FULL, כדאי להשתמש במקום זאת ב-Session.getEffectiveUser(). - ב-
AuthMode.LIMITED, מוודאים שהבעלים אישר את הסקריפט. - במצבי הרשאה אחרים, מומלץ להימנע מהפעלת אחת מהשיטות.
- אם אתם לקוחות Google Workspace שנתקלים באזהרה הזו מטריגר שניתן להתקין, וזה קורה לכם בפעם הראשונה, ודאו שהטריגר פועל כמשתמש בארגון שלכם.
הספרייה חסרה
יכול להיות שספרייה תדווח כחסרה אם יותר מדי אנשים ניגשים אליה בו-זמנית. כדי לפתור את הבעיה:
- מעתיקים את הקוד של הספרייה ישירות לסקריפט.
- מעתיקים את הספרייה ופורסים אותה מהחשבון שלכם.
- אם הספרייה לא נדרשת כדי שהסקריפט יפעל, צריך להסיר את הספרייה מפרויקט הסקריפט.
אירעה שגיאה כי גרסת הספרייה או גרסת הפריסה חסרות. קוד השגיאה Not_Found
הודעת השגיאה הזו מציינת אחד מהמקרים הבאים:
- הגרסה של הסקריפט שבה נעשה שימוש בפריסה נמחקה. כדי לפתור את הבעיה, צריך לערוך את הפריסה ולבחור גרסה אחרת של הסקריפט.
- גרסת ספרייה שהסקריפט משתמש בה נמחקה. כדי לפתור את הבעיה, בכלי לעריכת סקריפטים, בקטע Libraries (ספריות), מחפשים את הספרייה ומעדכנים אותה לגרסה אחרת או מסירים אותה. כדי לעדכן, לוחצים על מספר הגרסה ובוחרים גרסה אחרת. כדי להסיר, לוחצים על סמל האפשרויות הנוספות > הסרה.
- ספרייה כוללת ספרייה אחרת, והגרסה של הספרייה הזו נמחקה. כדי לפתור את הבעיה, צריך ליצור קשר עם מחבר הספרייה או להשתמש בגרסה אחרת של הספרייה שהסקריפט משתמש בה.
שגיאה 400: invalid_scope כשקוראים ל-Google Chat API באמצעות השירות המתקדם
אם מופיעה השגיאה Error 400: invalid_scope עם הודעת השגיאה Some requested scopes cannot be shown, זה אומר שלא ציינתם היקפי הרשאות בקובץ appsscript.json של פרויקט Apps Script. ברוב המקרים, Apps Script קובע באופן אוטומטי את היקפי ההרשאות שנדרשים לסקריפט, אבל כשמשתמשים בשירות המתקדם של Chat, צריך להוסיף באופן ידני את היקפי ההרשאות שהסקריפט משתמש בהם לקובץ המניפסט של פרויקט Apps Script. מידע נוסף על הגדרת היקפים מפורשים
כדי לפתור את השגיאה, צריך להוסיף את היקפי ההרשאות המתאימים לקובץ appsscript.json של פרויקט Apps Script כחלק ממערך oauthScopes. לדוגמה, כדי להפעיל את השיטה spaces.messages.create, מוסיפים את הפרטים הבאים:
"oauthScopes": [
"https://www.googleapis.com/auth/chat.messages.create"
]
האדמין שלך לא מתיר לבצע קריאות של הסקריפט UrlFetch אל <URL>
אדמינים ב-Google Workspace יכולים להשתמש ברשימת היתרים כדי לשלוט בגישה לדומיינים חיצוניים. צריך לפנות לאדמין כדי להוסיף את כתובת ה-URL לרשימת ההיתרים.
ניפוי באגים
חלק מהשגיאות הן עדינות ולא מפעילות הודעות. לדוגמה, יכול להיות שהקוד יפעל, אבל התוצאות יהיו לא צפויות. השיטות הבאות יעזרו לכם לחקור סקריפטים שמתנהגים בצורה לא צפויה.
רישום ביומן
אפשר לתעד מידע בזמן הפעלת סקריפט באמצעות שירות Cloud Logging או שירותי Logger ו-Console בכלי לעריכת סקריפטים.
Error Reporting
כדי להשתמש ב-Error Reporting ב-Google Cloud, צריך להשתמש בפרויקט רגיל שמנוהל על ידי המשתמש במקום בפרויקט ברירת מחדל.
כשמשתמשים בפרויקט רגיל, שגיאות בזמן ריצה מתועדות באופן אוטומטי ב-Google Cloud Error Reporting. הצגת יומני Cloud ודוחות שגיאות במסוף Google Cloud
הפעלות
ב-Google Apps Script מתועדת כל הרצה, כולל יומני Cloud. כדי לראות את ההפעלות, לוחצים על הפעלות .
בדיקת סטטוס השירות
אפשר לבדוק אם יש הפסקות שירות ב-Google Workspace ב-Google Workspace Status Dashboard.
שימוש בכלי לניפוי באגים ובנקודות עצירה
כדי לאתר בעיות בסקריפט, אפשר להריץ אותו במצב ניפוי באגים. כשמריצים סקריפט במצב ניפוי באגים, הסקריפט מושהה כשהוא מגיע לנקודת עצירה. נקודת עצירה היא שורה שהדגשתם בסקריפט, שלדעתכם יכולה להיות בעייתית. כשסקריפט מושהה, מוצג הערך של כל משתנה באותו רגע, כך שאפשר לבדוק את הפעולות הפנימיות של הסקריפט בלי להוסיף הרבה הצהרות רישום.
הוספת נקודת עצירה
כדי להוסיף נקודת עצירה, מעבירים את העכבר מעל מספר השורה של השורה שרוצים להוסיף לה את נקודת העצירה. בצד ימין של מספר השורה, לוחצים על העיגול. בתמונה הבאה מוצגת דוגמה לנקודת עצירה שנוספה לסקריפט:

הרצת סקריפט במצב ניפוי באגים
כדי להריץ את הסקריפט במצב ניפוי באגים, לוחצים על ניפוי באגים בחלק העליון של העורך.
לפני שהסקריפט מריץ את השורה עם נקודת העצירה, הוא מושהה ומציג טבלה עם מידע לניפוי באגים. אפשר להשתמש בטבלה הזו כדי לבדוק נתונים כמו ערכי הפרמטרים והמידע שמאוחסן באובייקטים.
כדי לשלוט באופן ההרצה של הסקריפט, משתמשים בכפתורים Step in (כניסה), Step over (דילוג) ו-Step out (יציאה) בחלק העליון של חלונית Debugger (מאבחן הבאגים). האפשרויות האלה מאפשרות להריץ את הסקריפט שורה אחת בכל פעם ולבדוק איך הערכים משתנים לאורך זמן.
שגיאה: קוד המקור של השורה הנוכחית לא זמין

השגיאה הזו מופיעה כשקובץ ניפוי באגים פעיל לא זמין.
Google Apps Script לא תומך בהצגה של סקריפטים של JavaScript (JS) שנוצרו באופן דינמי בכלי לעריכת סקריפטים, כמו אלה שנוצרו באמצעות eval() ו-new Function(). הסקריפטים האלה נוצרים ומופעלים במנוע V8, אבל לא מוצגים כקבצים עצמאיים בעורך.
אם תנסו להיכנס לסקריפטים האלה, תיתקלו בשגיאה הזו.
לדוגמה, נבחן את הקוד הבא:
function myFunction() {
eval('a=2');
}
כשמפעילים את eval(), הארגומנט שלו מטופל כקוד JS ומופעל כסקריפט שנוצר באופן דינמי במנוע V8. אם נכנסים ל-eval(), השגיאה הזו מופיעה. אם הסקריפט כולל הערה //# sourceURL, השם שלה מוצג בסטאק הביצוע. אחרת, הוא יופיע כרשומה ללא שם.
למרות הודעת השגיאה, סשן הניפוי באגים נשאר פעיל והביצוע יכול להימשך. כדי להמשיך, עוברים לשלב של כניסה, יציאה או הפעלה מחדש. עם זאת, השגיאה הזו ממשיכה להופיע כל עוד ההפעלה נשארת בתחום של הסקריפט הדינמי. אחרי שהביצוע יוצא מהסקריפט הדינמי, ניפוי הבאגים נמשך ללא השגיאה הזו.
בעיות עם כמה חשבונות Google
אם אתם מחוברים לכמה חשבונות Google בו-זמנית, יכול להיות שתיתקלו בבעיות בגישה לתוספים ולאפליקציות אינטרנט. פרויקטים, תוספים ואפליקציות אינטרנט של Apps Script לא תומכים בהתחברות לכמה חשבונות Google בו-זמנית.
אם פותחים את הכלי לעריכת סקריפטים כשמחוברים ליותר מחשבון אחד, Google מבקשת לבחור את החשבון שרוצים להמשיך איתו.
אם פותחים אפליקציית אינטרנט או תוסף ונתקלים בבעיות שקשורות להתחברות לכמה חשבונות ב-זמנית, אפשר לנסות אחד מהפתרונות הבאים:
- יוצאים מכל חשבונות Google ונכנסים רק לחשבון שבו נמצאים התוסף או אפליקציית האינטרנט שרוצים לגשת אליהם.
- פותחים חלון פרטי ב-Google Chrome או חלון מקביל לגלישה פרטית, ונכנסים לחשבון Google שבו נמצאים התוסף או אפליקציית האינטרנט שרוצים לגשת אליהם.
קבלת עזרה
אפשר להיכנס לדף התמיכה כדי לשאול שאלות או לדווח על באגים.