גם מפתחים מנוסים ביותר כמעט אף פעם לא כותבים קוד בצורה נכונה בניסיון הראשון, ולכן פתרון בעיות הוא חלק חשוב בתהליך הפיתוח. בקטע הזה נסביר על כמה טכניקות שיעזרו לכם למצוא שגיאות בסקריפטים, להבין אותן ולנפות באגים.
הודעות שגיאה
כשסקריפט נתקל בשגיאה, מוצגת הודעת שגיאה. ההודעה מלווה במספר שורה שמשמש לפתרון בעיות. יש שני סוגים בסיסיים של שגיאות שמוצגות בדרך הזו: שגיאות תחביר ושגיאות זמן ריצה.
שגיאות תחביר
שגיאות תחביר נגרמות כתוצאה מכתיבת קוד שלא תואם לדקדוק של 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)
בדרך כלל קל לפתור בעיות מהסוג הזה, כי הן מתגלות מיד והסיבות להן בדרך כלל פשוטות. אי אפשר לשמור קובץ שמכיל שגיאות תחביר, כלומר רק קוד תקין נשמר בפרויקט.
שגיאות זמן ריצה
השגיאות האלה נגרמות כתוצאה משימוש לא נכון בפונקציה או במחלקה, ואפשר לזהות אותן רק אחרי שהסקריפט מורץ. לדוגמה, הקוד הבא גורם לשגיאת זמן ריצה:
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 לכתובת האימייל כשקוראים ל-MailApp.sendEmail. מכיוון שזו לא כתובת אימייל תקינה, השגיאה הבאה מופיעה כשמריצים את הסקריפט:
כתובת אימייל לא תקינה: john (שורה 5)
הקושי בפתרון הבעיות האלה נובע מכך שלעתים קרובות הנתונים שמועברים לפונקציה לא נכתבים בקוד, אלא נמשכים מגיליון אלקטרוני, מטופס או ממקור נתונים חיצוני אחר. השימוש בטכניקות לניפוי באגים שמתוארות בהמשך יכול לעזור לכם לזהות את הסיבה לשגיאות האלה.
שגיאות נפוצות
ריכזנו כאן רשימה של שגיאות נפוצות והסיבות להן.
השירות הופעל יותר מדי פעמים: <שם הפעולה>
השגיאה הזו מציינת שחרגתם מהמכסה היומית שלכם לפעולה מסוימת. לדוגמה, השגיאה הזו עשויה להופיע אם שולחים יותר מדי אימיילים ביום אחד. המכסות מוגדרות ברמות שונות עבור חשבונות פרטיים, חשבונות בדומיין וחשבונות פרימיום, והן עשויות להשתנות בכל שלב ללא הודעה מוקדמת מ-Google. בתיעוד המכסות של Apps Script מפורטות מגבלות המכסות לפעולות שונות.
השרת לא זמין או אירעה שגיאת שרת. צריך לנסות שוב
יכולות להיות כמה סיבות לשגיאות האלה:
- שרת או מערכת של Google לא זמינים באופן זמני. מחכים כמה רגעים ומנסים להריץ את הסקריפט שוב.
- יש שגיאה בסקריפט שלא מופיעה לגביה הודעת שגיאה. נסו לנפות באגים בסקריפט ולבדוק אם אתם יכולים לבודד את הבעיה.
- יש באג ב-Google Apps Script שגורם לשגיאה הזו. הוראות לחיפוש ולשליחה של דוחות על באגים מופיעות במאמר בנושא באגים. לפני ששולחים דוח על באג חדש, כדאי לחפש כדי לראות אם משתמשים אחרים כבר דיווחו עליו.
נדרשת הרשאה כדי לבצע את הפעולה הזו.
השגיאה הזו מציינת שלסקריפט חסרה ההרשאה הדרושה להפעלה. כשמריצים סקריפט בכלי לעריכת סקריפטים או מפריט בתפריט מותאם אישית, מוצגת למשתמש תיבת דו-שיח של הרשאה. עם זאת, כשמריצים סקריפט מטריגר, מוטמע בדף Google Sites או מורץ כשירות, אי אפשר להציג את תיבת הדו-שיח הזו ומוצגת השגיאה הזו.
כדי לאשר את הסקריפט, פותחים את עורך הסקריפטים ומריצים פונקציה כלשהי. מופיעה בקשה לאישור, כדי שתוכלו לאשר את פרויקט הסקריפט. אם הסקריפט מכיל שירותים חדשים לא מורשים, צריך להעניק לו הרשאה מחדש.
השגיאה הזו נגרמת בדרך כלל בגלל טריגרים שמופעלים לפני שהמשתמש אישר אותם או שהאישור שלהם פג. אם אין לכם גישה לפרויקט הסקריפט (לדוגמה, אם השגיאה מתרחשת בתוסף שבו אתם משתמשים), בדרך כלל תוכלו להעניק הרשאה לסקריפט באמצעות שימוש חוזר בתוסף. אם טריגר ממשיך לפעול ולגרום לשגיאה הזו, אפשר להסיר את הטריגרים באופן הבא:
- בצד ימין של פרויקט Apps Script, לוחצים על מפעילים .
- משמאל לטריגר שרוצים להסיר, לוחצים על סמל האפשרויות הנוספות > מחיקת הטריגר.
אפשר גם להסיר טריגרים בעייתיים של תוספים על ידי הסרת התוסף.
יכול להיות שהשגיאות האלה נגרמות גם בגלל הרשאות גרנולריות. Apps Script יבקש מהמשתמש באופן אוטומטי את ההרשאות החסרות, אלא אם ההפעלה מתבצעת על ידי טריגר. כדי להגן על הפעלות של טריגרים מפני השגיאה הזו, אפשר לעיין בדף היקפי ההרשאה שלנו.
הגישה נדחתה: DriveApp או מדיניות הדומיין השביתה אפליקציות Drive של צד שלישי
אדמינים של דומיינים ב-Google Workspace יכולים להשבית את Google Drive API בדומיין שלהם, וכך למנוע מהמשתמשים להתקין אפליקציות של Google Drive ולהשתמש בהן. ההגדרה הזו גם מונעת מהמשתמשים להשתמש בתוספים של Apps Script שמשתמשים בשירות Drive או בשירות Drive מתקדם (גם אם הסקריפט קיבל הרשאה לפני שהאדמין השבית את Drive API).
עם זאת, אם תוסף או אפליקציית אינטרנט שמשתמשים בשירות Drive מתפרסמים לצורך התקנה בכל הדומיין והאדמין מתקין אותם עבור חלק מהמשתמשים בדומיין או עבור כולם, פונקציות הסקריפט יפעלו עבור המשתמשים האלה גם אם Drive API מושבת בדומיין.
לסקריפט אין הרשאה לקבל את זהות המשתמש הפעיל.
הערך מציין שהזהות וכתובת האימייל של המשתמש הפעיל לא זמינות לסקריפט. האזהרה הזו נובעת מקריאה אל
Session.getActiveUser().
השגיאה יכולה להופיע גם כתוצאה מקריאה ל-Session.getEffectiveUser() אם הסקריפט פועל במצב הרשאה שאינו AuthMode.FULL.
אם האזהרה הזו מופיעה, קריאות עוקבות אל User.getEmail() מחזירות רק "".
יש כמה דרכים לפתור את הבעיה שמוצגת באזהרה הזו, בהתאם למצב ההרשאה שבו הסקריפט פועל. מצב ההרשאה מוצג בפונקציות מופעלות כמאפיין authMode של e
פרמטר האירוע.
- ב-
AuthMode.FULL, כדאי להשתמש במקום זאת ב-Session.getEffectiveUser(). - ב-
AuthMode.LIMITED, מוודאים שהבעלים אישר את הסקריפט. - במצבי הרשאה אחרים, מומלץ להימנע מהפעלת אחת מהשיטות.
- אם אתם לקוחות Google Workspace שנתקלים באזהרה הזו מטריגר שאפשר להתקין, וזה קורה לכם בפעם הראשונה, ודאו שהטריגר פועל כמשתמש בארגון שלכם.
הספרייה חסרה
אם מוסיפים ספרייה פופולרית לסקריפט, יכול להיות שתופיע הודעת שגיאה שמציינת שהספרייה חסרה, גם אם היא מופיעה כהסתמכות של הסקריפט. יכול להיות שהסיבה לכך היא שיותר מדי אנשים ניגשים לספרייה בו-זמנית. כדי למנוע את השגיאה הזו, נסו אחד מהפתרונות הבאים:
- מעתיקים את הקוד של הספרייה לסקריפט ומסירים את התלות בספרייה.
- מעתיקים את סקריפט הספרייה ומפרסים אותו כספרייה מהחשבון. חשוב לעדכן את התלות בסקריפט המקורי בספרייה החדשה במקום בספרייה הציבורית.
אירעה שגיאה כי גרסת הספרייה או גרסת הפריסה חסרות. קוד השגיאה Not_Found
הודעת השגיאה הזו מציינת אחד מהמקרים הבאים:
- הגרסה של הסקריפט שהופעלה נמחקה. במאמר בנושא עריכת פריסה עם גרסאות מוסבר איך לעדכן את הגרסה של התסריט שנפרסה.
- הגרסה של הספרייה שבה הסקריפט משתמש נמחקה. כדי לבדוק איזו ספרייה חסרה, לוחצים לצד שם הספרייה על עוד
> פתיחה בכרטיסייה חדשה. הספרייה החסרה
גורמת להצגת הודעת שגיאה. אחרי שמאתרים את הספרייה שרוצים לעדכן, מבצעים אחת מהפעולות הבאות:
- מעדכנים את הספרייה כדי להשתמש בגרסה אחרת. איך מעדכנים ספרייה
- מסירים את הספרייה שנמחקה מפרויקט הסקריפט ומהקוד. כך מסירים ספרייה
- הסקריפט של ספרייה שהסקריפט שלכם משתמש בה כולל ספרייה אחרת שמשתמשת בגרסה שנמחקה. מבצעים אחת מהפעולות הבאות:
- אם יש לכם גישת עריכה לספרייה שבה התסריט משתמש, אתם יכולים לעדכן את הספרייה המשנית בתסריט לגרסה קיימת.
- מעדכנים את הספרייה כדי להשתמש בגרסה אחרת. איך מעדכנים ספרייה
- מסירים את הספרייה מפרויקט הסקריפט ומהקוד. כך מסירים ספרייה
שגיאה 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 יכולים להפעיל רשימת היתרים במסוף Admin כדי לקבוע לאילו דומיינים חיצוניים תהיה גישה דרך Apps Script.
כדי לפתור את השגיאה, צריך לפנות לאדמין ולבקש ממנו להוסיף את כתובת ה-URL לרשימת ההיתרים.
ניפוי באגים
לא כל טעות גורמת להצגת הודעת שגיאה. יכול להיות שיש שגיאה פחות ברורה, שבה הקוד נכון מבחינה טכנית ואפשר להריץ אותו, אבל התוצאות לא תואמות למה שציפיתם. ריכזנו כאן כמה אסטרטגיות לטיפול במצבים כאלה ולבדיקה נוספת של סקריפט שלא פועל כמו שציפיתם.
רישום ביומן
במהלך ניפוי הבאגים, לעיתים קרובות מועיל לתעד מידע בזמן הפעלת פרויקט סקריפט. ב-Google Apps Script יש שתי שיטות לרישום מידע: שירות Cloud Logging ושירותי Logger ו-console הבסיסיים יותר, שמוטמעים בעורך Apps Script.
פרטים נוספים זמינים במדריך לרישום ביומן.
Error Reporting
חריגים שמתרחשים בגלל שגיאות בזמן ריצה נרשמים באופן אוטומטי באמצעות שירות דיווח השגיאות של Google Cloud. השירות הזה מאפשר לכם לחפש ולסנן הודעות חריגה שנוצרות בפרויקט הסקריפט.
כדי לגשת אל Error Reporting, אפשר לעיין במאמר הצגת יומנים ודוחות שגיאות ב-Cloud במסוף Google Cloud Platform.
הפעלות
בכל פעם שמריצים סקריפט, מערכת Apps Script יוצרת רשומה של ההרצה, כולל יומני Cloud. הרישומים האלה יכולים לעזור לכם להבין אילו פעולות בוצעו על ידי הסקריפט.
כדי לראות את ההרצות של הסקריפט בפרויקט Apps Script, בצד ימין לוחצים על Executions (הרצות) .
בדיקת הסטטוס של שירות Apps Script
למרות שזה נדיר, לפעמים יש בעיות זמניות בשירותים ספציפיים של Google Workspace (כמו Gmail או Drive) שעלולות לגרום להפסקות בשירות. במצב כזה, יכול להיות שפרויקטים של Apps Script שמתקשרים עם השירותים האלה לא יפעלו כצפוי.
כדי לבדוק אם יש הפסקה זמנית בשירות של Google Workspace, אפשר לעיין ב-Google Workspace Status Dashboard. אם יש כרגע הפסקת שירות, אפשר לחכות עד שהיא תיפתר או להיעזר במרכז העזרה של Google Workspace או במסמכי התיעוד של בעיות ידועות ב-Google Workspace.
שימוש בכלי לניפוי באגים ובנקודות עצירה
כדי לאתר בעיות בסקריפט, אפשר להריץ אותו במצב ניפוי באגים. כשמריצים סקריפט במצב ניפוי באגים, הסקריפט מושהה כשהוא מגיע לנקודת עצירה. נקודת עצירה היא שורה שהדגשתם בסקריפט, שלדעתכם יכולה להיות בעייתית. כשסקריפט מושהה, מוצג הערך של כל משתנה באותו רגע, כך שאפשר לבדוק את הפעולות הפנימיות של הסקריפט בלי להוסיף הרבה הצהרות רישום.
הוספת נקודת עצירה
כדי להוסיף נקודת עצירה, מעבירים את העכבר מעל מספר השורה של השורה שרוצים להוסיף לה את נקודת העצירה. בצד ימין של מספר השורה, לוחצים על העיגול. בתמונה הבאה מוצגת דוגמה לנקודת עצירה שנוספה לסקריפט:

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

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