Nawet najbardziej doświadczony deweloper rzadko pisze kod poprawnie za pierwszym razem, dlatego rozwiązywanie problemów jest ważną częścią procesu tworzenia aplikacji. W tej sekcji omówimy techniki, które pomogą Ci znajdować, rozumieć i debugować błędy w skryptach.
Komunikaty o błędach
Gdy skrypt napotka błąd, wyświetli się komunikat o błędzie. Komunikatowi towarzyszy numer wiersza, który służy do rozwiązywania problemów. W ten sposób wyświetlane są 2 podstawowe rodzaje błędów: błędy składniowe i błędy czasu działania.
Błędy składniowe
Błędy składniowe są spowodowane napisaniem kodu, który nie jest zgodny z gramatyką JavaScript. Błędy są wykrywane, gdy tylko spróbujesz zapisać skrypt. Na przykład ten fragment kodu zawiera błąd składniowy:
function emailDataRow(rowNumber) { var sheet = SpreadsheetApp.getActiveSheet(); var data = sheet.getDataRange().getValues(); var rowData = data[rowNumber-1].join(" "; MailApp.sendEmail('[email protected]', 'Data in row ' + rowNumber, rowData); }
Problem ze składnią polega na braku znaku )
na końcu czwartego wiersza. Podczas próby zapisania skryptu zobaczysz ten błąd:
Brak znaku ) po liście argumentów. (wiersz 4)
Rozwiązywanie problemów tego typu jest zwykle proste, ponieważ błędy są od razu wykrywane i mają proste przyczyny. Nie możesz zapisać pliku zawierającego błędy składniowe, co oznacza, że w projekcie zapisywany jest tylko prawidłowy kod.
Błędy w czasie wykonywania
Błędy te są spowodowane nieprawidłowym użyciem funkcji lub klasy i można je wykryć dopiero po uruchomieniu skryptu. Na przykład ten kod powoduje błąd w czasie działania:
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); }
Kod jest prawidłowo sformatowany, ale podczas wywoływania funkcji MailApp.sendEmail
przekazujemy wartość „john” jako adres e-mail. Ponieważ nie jest to prawidłowy adres e-mail, podczas uruchamiania skryptu pojawia się ten błąd:
Nieprawidłowy adres e-mail: john (wiersz 5)
Rozwiązywanie tych błędów jest trudniejsze, ponieważ dane przekazywane do funkcji często nie są zapisane w kodzie, ale pobierane z arkusza kalkulacyjnego, formularza lub innego zewnętrznego źródła danych. Skorzystaj z technik debugowania opisanych poniżej, aby zidentyfikować przyczynę tych błędów.
Typowe błędy
Poniżej znajdziesz listę typowych błędów i ich przyczyn.
Usługa wywołana zbyt wiele razy: <action name>
Ten błąd oznacza, że przekroczono dzienny limit określonego działania. Ten błąd może się pojawić na przykład wtedy, gdy wyślesz zbyt wiele e-maili w ciągu jednego dnia. Limity są ustawione na różnych poziomach dla kont osobistych, domenowych i premier i mogą ulec zmianie w dowolnym momencie bez wcześniejszego powiadomienia ze strony Google. Limity różnych działań możesz sprawdzić w dokumentacji limitów Apps Script.
Serwer jest niedostępny lub Wystąpił błąd serwera.Spróbuj ponownie.
Oto kilka możliwych przyczyn tych błędów:
- Serwer lub system Google jest tymczasowo niedostępny. Poczekaj chwilę i spróbuj ponownie uruchomić skrypt.
- W skrypcie występuje błąd, do którego nie jest przypisany komunikat o błędzie. Spróbuj zdebugować skrypt i sprawdzić, czy możesz wyodrębnić problem.
- Ten błąd jest spowodowany błędem w Google Apps Script. Instrukcje wyszukiwania i zgłaszania błędów znajdziesz w sekcji Błędy. Zanim zgłosisz nowy błąd, wyszukaj, czy inni użytkownicy już go zgłosili.
Do wykonania tej czynności wymagana jest autoryzacja.
Ten błąd oznacza, że skrypt nie ma uprawnień wymaganych do uruchomienia. Gdy skrypt jest uruchamiany w edytorze skryptów lub z poziomu niestandardowego elementu menu, użytkownikowi wyświetla się okno dialogowe autoryzacji. Jeśli jednak skrypt jest uruchamiany przez wyzwalacz, osadzony na stronie Witryn Google lub uruchamiany jako usługa, okno dialogowe nie może zostać wyświetlone i pojawia się ten błąd.
Aby autoryzować skrypt, otwórz edytor skryptów i uruchom dowolną funkcję. Wyświetli się prośba o autoryzację, aby można było autoryzować projekt skryptu. Jeśli skrypt zawiera nowe nieautoryzowane usługi, musisz ponownie autoryzować skrypt.
Ten błąd jest często spowodowany wyzwalaczami, które uruchamiają się, zanim użytkownik je autoryzuje. Jeśli nie masz dostępu do projektu skryptu (np. błąd występuje w przypadku używanego przez Ciebie dodatku), zwykle możesz autoryzować skrypt, ponownie używając dodatku. Jeśli reguła nadal się uruchamia i powoduje ten błąd, możesz ją usunąć, wykonując te czynności:
- Po lewej stronie projektu Apps Script kliknij Reguły .
- Po prawej stronie wyzwalacza, który chcesz usunąć, kliknij Więcej > Usuń wyzwalacz.
Możesz też usunąć problematyczne wyzwalacze dodatku, odinstalowując dodatek.
Odmowa dostępu: DriveApp lub Zasady domeny Twojego konta spowodowały wyłączenie aplikacji innych firm na Dysku
Administratorzy domen mogą wyłączyć interfejs Drive API w swojej domenie, co uniemożliwi użytkownikom instalowanie i korzystanie z aplikacji Google Drive. Google Workspace To ustawienie uniemożliwia też użytkownikom korzystanie z dodatków do Apps Script, które używają usługi Dysku lub zaawansowanej usługi Dysku (nawet jeśli skrypt został autoryzowany przed wyłączeniem interfejsu Drive API przez administratora).
Jeśli jednak dodatek lub aplikacja internetowa korzystająca z usługi Dysku zostanie opublikowana w celu instalacji w całej domenie i zostanie zainstalowana przez administratora dla niektórych lub wszystkich użytkowników w domenie, funkcje skryptu będą działać dla tych użytkowników nawet wtedy, gdy interfejs Drive API jest wyłączony w domenie.
Skrypt nie ma uprawnień do uzyskania tożsamości aktywnego użytkownika.
Wskazuje, że tożsamość i adres e-mail aktywnego użytkownika są niedostępne dla skryptu. Ten komunikat ostrzegawczy jest wynikiem wywołania funkcji Session.getActiveUser()
. Może to być również wynikiem wywołania funkcji Session.getEffectiveUser()
w przypadku, gdy skrypt jest uruchomiony w trybie autoryzacji innym niż AuthMode.FULL
. Jeśli to ostrzeżenie zostanie zasygnalizowane, kolejne wywołania funkcji User.getEmail()
będą zwracać tylko „”.
Istnieje kilka sposobów rozwiązania tego problemu w zależności od trybu autoryzacji, w którym działa skrypt. Tryb autoryzacji jest udostępniany w funkcjach wywoływanych jako właściwość authMode
parametru zdarzenia e
.
- W przypadku
AuthMode.FULL
rozważ użycieSession.getEffectiveUser()
zamiast niej. - W
AuthMode.LIMITED
sprawdź, czy właściciel autoryzował skrypt. - W innych trybach autoryzacji unikaj wywoływania obu tych metod.
- Jeśli jesteś klientem, który Google Workspace niedawno zaczął otrzymywać to ostrzeżenie z wywoływacza instalowanego, upewnij się, że wywoływacz jest uruchamiany jako użytkownik w Twojej organizacji.
Brak biblioteki
Jeśli do skryptu dodasz popularną bibliotekę, możesz otrzymać komunikat o błędzie informujący o jej braku, mimo że jest ona wymieniona jako zależność skryptu. Może to być spowodowane tym, że zbyt wiele osób korzysta z biblioteki w tym samym czasie. Aby uniknąć tego błędu, wypróbuj jedno z tych rozwiązań:
- Skopiuj i wklej kod biblioteki do skryptu, a następnie usuń zależność od biblioteki.
- Skopiuj skrypt biblioteki i wdróż go jako bibliotekę na swoim koncie. Pamiętaj, aby zaktualizować zależność w oryginalnym skrypcie do nowej biblioteki zamiast do biblioteki publicznej.
Wystąpił błąd z powodu brakującej wersji biblioteki lub wersji wdrożenia. Kod błędu Not_Found
Ten komunikat o błędzie oznacza jedną z tych sytuacji:
- Wdrożona wersja skryptu została usunięta. Aby zaktualizować wdrożoną wersję skryptu, przeczytaj artykuł Edytowanie wdrożenia wersji.
- Wersja biblioteki używana przez skrypt została usunięta. Aby sprawdzić, której biblioteki brakuje, obok jej nazwy kliknij > Otwórz w nowej karcie. Brakująca biblioteka wyświetla komunikat o błędzie. Po znalezieniu biblioteki, którą chcesz zaktualizować, wykonaj jedną z tych czynności:
- Zaktualizuj bibliotekę, aby używać innej wersji. Zobacz Aktualizowanie biblioteki.
- Usuń usuniętą bibliotekę z projektu skryptu i kodu. Zobacz Usuwanie biblioteki.
Więcej - Skrypt biblioteki używanej przez Twój skrypt zawiera inną bibliotekę, która korzysta z usuniętej wersji. Wykonaj jedną z tych czynności:
- Jeśli masz dostęp do edycji biblioteki, z której korzysta skrypt, zaktualizuj bibliotekę dodatkową w tym skrypcie do istniejącej wersji.
- Zaktualizuj bibliotekę, aby używać innej wersji. Zobacz Aktualizowanie biblioteki.
- Usuń bibliotekę z projektu skryptu i kodu. Zobacz Usuwanie biblioteki.
Błąd 400: invalid_scope podczas wywoływania interfejsu Google Chat API za pomocą usługi zaawansowanej
Jeśli zobaczysz znak Error 400: invalid_scope
z komunikatem o błędzie Some requested scopes cannot be shown
, oznacza to, że w pliku appsscript.json
projektu Apps Script nie określono żadnych zakresów autoryzacji. W większości przypadków Apps Script automatycznie określa zakresy, których potrzebuje skrypt, ale gdy używasz usługi zaawansowanej Google Chat, musisz ręcznie dodać zakresy autoryzacji używane przez skrypt do pliku manifestu projektu Apps Script. Zobacz Ustawianie jawnych zakresów.
Aby naprawić ten błąd, dodaj odpowiednie zakresy autoryzacji do pliku appsscript.json
projektu Apps Script w ramach tablicy oauthScopes
. Aby na przykład wywołać metodę spaces.messages.create
, dodaj ten kod:
"oauthScopes": [ "https://www.googleapis.com/auth/chat.messages.create" ]
Administrator nie zezwala na wywoływanie adresu <URL> przez UrlFetch
Administratorzy Google Workspace mogą włączyć listę dozwolonych w konsoli administracyjnej, aby określić, do których domen zewnętrznych masz dostęp za pomocą Apps Script.
Aby rozwiązać ten problem, skontaktuj się z administratorem i poproś go o dodanie adresu URL do listy dozwolonych.
Debugowanie
Nie wszystkie błędy powodują wyświetlenie komunikatu o błędzie. Może wystąpić bardziej subtelny błąd, w którym kod jest technicznie poprawny i może zostać wykonany, ale wyniki nie są zgodne z Twoimi oczekiwaniami. Oto kilka strategii radzenia sobie w takich sytuacjach i dalszego sprawdzania skryptu, który nie działa zgodnie z oczekiwaniami.
Logowanie
Podczas debugowania często przydaje się rejestrowanie informacji w trakcie wykonywania projektu skryptu. Google Apps Script udostępnia 2 metody rejestrowania informacji: usługę rejestrowania w chmurze oraz bardziej podstawowe usługi rejestrowania i konsoli, które są wbudowane w edytorze Apps Script.
Więcej informacji znajdziesz w przewodniku po rejestrowaniu.
Error Reporting
Wyjątki, które występują z powodu błędów środowiska wykonawczego, są automatycznie rejestrowane za pomocą usługi Google Cloud Error Reporting. Ta usługa umożliwia wyszukiwanie i filtrowanie komunikatów o wyjątkach tworzonych przez projekt skryptu.
Aby uzyskać dostęp do Error Reporting, przeczytaj artykuł Wyświetlanie logów i raportów o błędach w konsoli Google Cloud Platform.
Uruchomienia
Za każdym razem, gdy uruchamiasz skrypt, Apps Script rejestruje jego wykonanie, w tym dzienniki Cloud. Te rekordy pomogą Ci zrozumieć, jakie działania wykonał skrypt.
Aby wyświetlić wykonania skryptu w projekcie Apps Script, po lewej stronie kliknij Wykonania
.Sprawdzanie stanu usługi Apps Script
Chociaż zdarza się to rzadko, niektóre usługi Google Workspace (takie jak Gmail czy Dysk) mogą czasami napotkać tymczasowe problemy, które mogą prowadzić do przerw w działaniu usługi. W takiej sytuacji projekty Apps Script, które korzystają z tych usług, mogą nie działać zgodnie z oczekiwaniami.
Aby sprawdzić, czy nie nastąpiła awaria usługi Google Workspace, otwórz Panel stanu Google Workspace. Jeśli występuje awaria, możesz poczekać na jej rozwiązanie lub poszukać dodatkowej pomocy w Centrum pomocy Google Workspace lub w dokumentacji znanych problemów z Google Workspace.
Korzystanie z debugera i punktów przerwania
Aby znaleźć problemy w skrypcie, możesz uruchomić go w trybie debugowania. Gdy skrypt jest uruchamiany w trybie debugowania, zatrzymuje się po osiągnięciu punktu przerwania, czyli wiersza, który został wyróżniony w skrypcie i w którym może występować problem. Gdy skrypt zostanie wstrzymany, wyświetli wartość każdej zmiennej w danym momencie, co pozwoli Ci sprawdzić wewnętrzne działanie skryptu bez konieczności dodawania wielu instrukcji rejestrowania.
Dodawanie punktu przerwania
Aby dodać punkt przerwania, najedź kursorem na numer wiersza, do którego chcesz dodać punkt przerwania. Po lewej stronie numeru wiersza kliknij kółko. Obraz poniżej przedstawia przykład punktu przerwania dodanego do skryptu:
Uruchamianie skryptu w trybie debugowania
Aby uruchomić skrypt w trybie debugowania, u góry edytora kliknij Debuguj.
Przed uruchomieniem wiersza z punktem przerwania skrypt zatrzymuje się i wyświetla tabelę informacji o debugowaniu. W tej tabeli możesz sprawdzać dane, takie jak wartości parametrów i informacje przechowywane w obiektach.
Aby sterować sposobem uruchamiania skryptu, u góry panelu Debugger użyj przycisków „Step in” (Krok do), „Step over” (Krok ponad) i „Step out” (Krok z). Umożliwiają one uruchamianie skryptu wiersz po wierszu i sprawdzanie, jak zmieniają się wartości w czasie.
Błąd: kod źródłowy bieżącego wiersza jest niedostępny
Ten błąd pojawia się, gdy aktywny plik debugowania jest niedostępny. Google Apps Script nie obsługuje wyświetlania w edytorze skryptów generowanych dynamicznie skryptów JavaScript (JS), takich jak te generowane za pomocą eval()
i new Function()
. Te skrypty są tworzone i wykonywane w silniku V8, ale nie są reprezentowane jako osobne pliki w edytorze. Jeśli przejdziesz do tych skryptów, zobaczysz ten błąd.
Przyjrzyjmy się temu przykładowemu kodowi:
function myFunction() { eval('a=2'); }
Gdy wywoływana jest funkcja eval()
, jej argument jest traktowany jako kod JS i uruchamiany jako dynamicznie utworzony skrypt w silniku V8. Jeśli przejdziesz do funkcji eval()
, pojawi się ten błąd. Jeśli skrypt zawiera komentarz //# sourceURL
, jego nazwa jest wyświetlana w stosie wywołań. W przeciwnym razie pojawi się jako wpis bez nazwy.
Pomimo komunikatu o błędzie sesja debugowania pozostaje aktywna i można kontynuować wykonywanie. Aby kontynuować, przejdź do kroku „Wejdź”, „Wyjdź” lub „Wznów” wykonywanie. Ten błąd będzie się jednak nadal pojawiać, dopóki wykonywanie pozostanie w zakresie skryptu dynamicznego. Po wyjściu z dynamicznego skryptu debugowanie jest kontynuowane bez tego błędu.
Problemy z korzystaniem z kilku kont Google
Jeśli logujesz się na kilka kont Google jednocześnie, możesz mieć problemy z dostępem do dodatków i aplikacji internetowych. Logowanie się na wiele kont (korzystanie z kilku kont Google jednocześnie) nie jest obsługiwane w przypadku Apps Script, dodatków i aplikacji internetowych.
Jeśli otworzysz edytor Apps Script, gdy jesteś zalogowany na więcej niż 1 konto, Google poprosi Cię o wybranie konta, którego chcesz użyć.
Jeśli po otwarciu aplikacji internetowej lub dodatku wystąpią problemy z jednoczesnym korzystaniem z kilku kont, wypróbuj jeden z tych sposobów:
- Wyloguj się ze wszystkich kont Google i zaloguj się tylko na to, na którym znajduje się dodatek lub aplikacja internetowa, do których chcesz uzyskać dostęp.
- Otwórz okno incognito w Google Chrome lub inne okno przeglądania prywatnego i zaloguj się na konto Google, na którym znajduje się dodatek lub aplikacja internetowa, do których chcesz uzyskać dostęp.
Uzyskiwanie pomocy
Rozwiązywanie problemów za pomocą narzędzi i technik wymienionych powyżej może pomóc w rozwiązaniu różnych problemów, ale mogą wystąpić problemy, które wymagają dodatkowej pomocy. Informacje o tym, gdzie zadawać pytania i zgłaszać błędy, znajdziesz na naszej stronie pomocy.