Nawet najbardziej doświadczeni deweloperzy rzadko od razu piszą poprawny kod, dlatego rozwiązywanie problemów jest ważną częścią procesu programowania. W tej sekcji omówimy kilka technik, które pomogą Ci znaleźć, zrozumieć 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. Występują 2 podstawowe rodzaje błędów wyświetlanych w ten sposób: błędy składniowe i błędy czasu wykonywania.
Błędy składniowe
Błędy składni są spowodowane napisaniem kodu, który nie jest zgodny z gramatyką JavaScript. Błędy te są wykrywane, gdy tylko spróbujesz zapisać skrypt. Na przykład ten fragment kodu zawiera błąd składni:
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 z składnią polega na braku znaku )
na końcu czwartego wiersza. Gdy spróbujesz zapisać skrypt, pojawi się ten komunikat o błędzie:
Brak ) po liście argumentów. (wiersz 4)
Tego typu błędy są zwykle łatwe do rozwiązania, ponieważ można je szybko znaleźć i mają zwykle proste przyczyny. Nie możesz zapisać pliku zawierającego błędy składni, co oznacza, że w Twoim projekcie zapisywany jest tylko prawidłowy kod.
Błędy w czasie wykonywania
Te błędy są spowodowane nieprawidłowym użyciem funkcji lub klasy i mogą zostać wykryte dopiero po uruchomieniu skryptu. Na przykład ten kod powoduje błąd czasu wykonywania:
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, lecz pobierane z arkusza kalkulacyjnego, formularza lub innego zewnętrznego źródła danych. Za pomocą tych technik debugowania możesz zidentyfikować przyczynę tych błędów.
Typowe błędy
Poniżej znajdziesz listę typowych błędów i ich przyczyn.
Usługa została wywołana zbyt wiele razy: <action name>
Ten błąd wskazuje, że został przekroczony dzienny limit danego działania. Ten błąd może się pojawić na przykład wtedy, gdy wysyłasz zbyt wiele e-maili w ciągu jednego dnia. Limity są ustawiane na różnych poziomach dla kont użytkowników indywidualnych, kont domen i kont premierowych. Mogą być one zmienione w dowolnym momencie bez wcześniejszego powiadomienia przez Google. Limity limity dla różnych działań znajdziesz w dokumentacji dotyczącej limitów w Apps Script.
Serwer niedostępny lub Wystąpił błąd serwera. Spróbuj ponownie
Te błędy mogą mieć kilka przyczyn:
- Serwer lub system Google jest tymczasowo niedostępny. Zaczekaj chwilę i spróbuj ponownie uruchomić skrypt.
- W skrypcie występuje błąd, który nie ma odpowiadającego mu komunikatu o błędzie. Spróbuj debugować skrypt i sprawdź, czy uda Ci się zlokalizować problem.
- Ten błąd jest spowodowany błędem w Google Apps Script. Instrukcje dotyczące wyszukiwania i przesyłania raportów o błędach znajdziesz w artykule Błędy. Zanim zgłosisz nowy błąd, sprawdź, czy inni go nie zgłosili.
Aby wykonać tę czynność, musisz się zalogować.
Ten błąd oznacza, że skrypt nie ma wymaganych uprawnień do uruchomienia. Gdy skrypt jest uruchamiany w Edytorze skryptów lub z niestandardowego elementu menu, użytkownikowi wyświetla się okno autoryzacji. Jednak gdy skrypt jest uruchamiany z pobudki, osadzony na stronie Witryny Google lub uruchamiany jako usługa, nie można wyświetlić okna dialogowego i wyświetla się ten błąd.
Aby autoryzować skrypt, otwórz Edytor skryptów i uruchom dowolną funkcję. Pojawi się prośba o autoryzację projektu skryptu. Jeśli skrypt zawiera nowe nieautoryzowane usługi, musisz ponownie autoryzować skrypt.
Ten błąd jest często spowodowany przez wyzwalacze, które są aktywowane, zanim użytkownik je autoryzował. Jeśli nie masz dostępu do projektu skryptu (ponieważ błąd występuje na przykład w przypadku używanego przez Ciebie dodatku), możesz zazwyczaj autoryzować skrypt, używając ponownie tego dodatku. Jeśli wyzwalacz nadal powoduje ten błąd, możesz go usunąć, wykonując te czynności:
- Po lewej stronie projektu Apps Script kliknij Reguły .
- Po prawej stronie reguły, którą chcesz usunąć, kliknij Więcej > Usuń regułę.
Możesz też usunąć problemowe 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 Google Workspace mogą wyłączyć interfejs Drive API w swojej domenie, co uniemożliwi użytkownikom instalowanie i korzystanie z aplikacji Dysku Google. To ustawienie uniemożliwia też użytkownikom korzystanie z dodatków do Apps Script, które korzystają z usługi Dysk lub zaawansowanej usługi Dysk (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 Dysk jest opublikowana do instalacji w całej domenie i jest zainstalowana przez administratora dla niektórych lub wszystkich użytkowników w domenie, skrypt działa dla tych użytkowników, nawet jeśli interfejs API Dysku jest w domenie wyłączony.
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. To ostrzeżenie zostało wysłane w odpowiedzi na połączenie z numeru Session.getActiveUser()
.
Może to być też spowodowane wywołaniem funkcji Session.getEffectiveUser()
, jeśli skrypt działa w trybie autoryzacji innym niż AuthMode.FULL
.
Jeśli to ostrzeżenie zostanie wysłane, kolejne wywołania funkcji User.getEmail()
zwracają tylko „"”.
W zależności od trybu autoryzacji, w którym działa skrypt, możesz rozwiązać ten problem na kilka sposobów. Tryb autoryzacji jest dostępny w funkcjach wywoływanych jako właściwość authMode
parametru e
event.
- W kolumnie
AuthMode.FULL
możesz zamiast tego użyć kolumnySession.getEffectiveUser()
. - W sekcji
AuthMode.LIMITED
sprawdź, czy właściciel autoryzował skrypt. - W innych trybach autoryzacji nie używaj żadnej z tych metod.
- Jeśli jesteś klientem Google Workspace i po raz pierwszy widzisz to ostrzeżenie dotyczące instalowanego reguły, sprawdź, czy reguła działa jako użytkownik w Twojej organizacji.
Brak biblioteki
Jeśli dodasz do skryptu popularną bibliotekę, może pojawić się 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 kod biblioteki i wklej go do skryptu, a potem usuń zależność od biblioteki.
- Skopiuj skrypt biblioteki i wdrożyć go jako bibliotekę na swoim koncie. Pamiętaj, aby zaktualizować zależność w pierwotnym skrypcie, aby odwodziła się do nowej biblioteki, a nie 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 jedno z tych zdarzeń:
- Rozmieszczona wersja skryptu została usunięta. Aby zaktualizować wersję wdrożonego skryptu, zapoznaj się z artykułem Edytowanie wersji wdrożonego skryptu.
- 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ęte biblioteki z projektu skryptu i kodu. Zobacz Usuwanie biblioteki.
Więcej
- Skrypt biblioteki, z której korzysta Twój skrypt, zawiera inną bibliotekę, która korzysta z usuniętej wersji. Wykonaj jedną z tych czynności:
- Jeśli masz uprawnienia do edycji biblioteki, której używa skrypt, zaktualizuj w tym skrypcie bibliotekę podrzędną 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 w przypadku usługi zaawansowanej
Jeśli napotkasz błąd Error 400: invalid_scope
z komunikatem Some requested scopes cannot be shown
, oznacza to, że w pliku appsscript.json
projektu Apps Script nie masz określonych żadnych zakresów autoryzacji. W większości przypadków Apps Script automatycznie określa zakresy uprawnień potrzebne do działania skryptu, ale jeśli używasz zaawansowanej usługi Chat, musisz ręcznie dodać do pliku manifestu projektu Apps Script zakresy uprawnień, których potrzebuje skrypt. Zobacz Ustawianie zakresów jednoznacznych.
Aby naprawić błąd, dodaj odpowiednie zakresy autoryzacji do pliku appsscript.json
projektu Apps Script jako część tablicy oauthScopes
. Aby na przykład wywołać metodę spaces.messages.create
, dodaj:
"oauthScopes": [
"https://www.googleapis.com/auth/chat.messages.create"
]
UrlFetch nie może wywoływać adresu <URL> ze względu na ustawienia administratora
Administratorzy Google Workspace mogą włączyć listę dozwolonych w konsoli administracyjnej, aby kontrolować, do których domen zewnętrznych masz dostęp za pomocą Apps Script.
Aby rozwiązać ten problem, skontaktuj się z administratorem i poproś o dodanie adresu URL do listy dozwolonych.
Debugowanie
Nie wszystkie błędy powodują wyświetlenie komunikatu o błędzie. Może wystąpić błąd, który nie jest widoczny na pierwszy rzut oka, a kod jest technicznie prawidłowy i może być wykonany, ale wyniki nie są zgodne z oczekiwaniami. Poniżej znajdziesz kilka strategii radzenia sobie z takimi sytuacjami i dalszego sprawdzania skryptu, który nie działa zgodnie z oczekiwaniami.
Logowanie
Podczas debugowania często przydaje się rejestrowanie informacji podczas wykonywania projektu skryptu. Google Apps Script ma 2 metody rejestrowania informacji: usługę rejestrowania w chmurze oraz prostsze usługi rejestrowania i konsoli, które są wbudowane w edytorze Apps Script.
Więcej informacji znajdziesz w przewodniku dotyczącym rejestrowania.
Error Reporting
Wyjątki występujące z powodu błędów czasu wykonywania 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 zgłaszania błędów, zapoznaj się z artykułem Wyświetlanie logów Cloud i raportów o błędach w konsoli Google Cloud Platform.
Uruchomienia
Za każdym razem, gdy uruchamiasz skrypt, Apps Script tworzy jego zapis, w tym dzienniki Cloud. Te rekordy mogą Ci pomóc zrozumieć, jakie akcje wykonał skrypt.
Aby wyświetlić uruchomienia skryptu w projekcie Apps Script, po lewej stronie kliknij Wykonania
.Sprawdzanie stanu usługi Apps Script
Chociaż zdarza się to rzadko, czasami w przypadku niektórych usług Google Workspace (takich jak Gmail czy Dysk) występują tymczasowe problemy, które mogą prowadzić do przerw w działaniu usługi. W takim przypadku projekty Apps Script, które współpracują z tymi usługami, 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ąpiła awaria, możesz poczekać, aż zostanie rozwiązana, lub uzyskać dodatkową pomoc 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ę w miejscu punktu przerwania, czyli wyróżnionego w skrypcie wiersza, w którym prawdopodobnie występuje problem. Gdy skrypt się zatrzyma, wyświetla wartość każdej zmiennej w danym momencie, co pozwala Ci sprawdzać działanie skryptu bez konieczności dodawania dużej ilości instrukcji logowania.
Dodawanie punktu przerwania
Aby dodać punkt przełamania, najedź kursorem na numer wiersza, do którego chcesz go dodać. Po lewej stronie numeru linii kliknij kółko. Na ilustracji poniżej widać przykład punktu przerwania dodanego do skryptu:
Uruchamianie skryptu w trybie debugowania
Aby uruchomić skrypt w trybie debugowania, u góry edytora kliknij Debugowanie.
Zanim skrypt uruchomi wiersz z punktem przerwania, zatrzymuje się i wyświetla tabelę informacji debugowania. Za pomocą tej tabeli możesz sprawdzać dane, np. wartości parametrów i informacje przechowywane w obiektach.
Aby kontrolować sposób wykonywania skryptu, u góry panelu Debuger kliknij przyciski „Wejdź do wnętrza”, „Pomiń” i „Wyjdź”. Dzięki nim możesz uruchamiać skrypt po jednej linii naraz i sprawdzać, jak zmieniają się wartości w czasie.
Problemy z wieloma kontami 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 projektów Apps Script, dodatków i aplikacji internetowych.
Jeśli otworzysz edytor Apps Script, będąc zalogowanym na więcej niż 1 konto, Google poprosi Cię o wybranie konta, na którym chcesz kontynuować.
Jeśli otworzysz aplikację internetową lub dodatek i napotkasz 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órej chcesz uzyskać dostęp.
- Otwórz okno incognito w Google Chrome lub inne okno przeglądania prywatnego i zaloguj się na konto Google zawierające dodatek lub aplikację internetową, do których chcesz uzyskać dostęp.
Uzyskiwanie pomocy
Debugowanie problemu za pomocą wymienionych wyżej narzędzi i technik może rozwiązać wiele problemów, ale mogą pojawić się takie, które wymagają dodatkowej pomocy. Informacje o tym, gdzie można zadawać pytania i zgłaszać błędy, znajdziesz na stronie pomocy.