Поиск неисправностей

Даже самый опытный разработчик редко пишет код правильно с первой попытки, поэтому устранение неполадок становится важной частью процесса разработки. В этом разделе мы рассмотрим некоторые методы, которые помогут вам найти, понять и отладить ошибки в ваших сценариях.

Сообщения об ошибках

Когда ваш скрипт обнаруживает ошибку, отображается сообщение об ошибке. Сообщение сопровождается номером строки, используемой для устранения неполадок. Существует два основных типа ошибок, отображаемых таким образом: синтаксические ошибки и ошибки времени выполнения .

Синтаксические ошибки

Синтаксические ошибки вызваны написанием кода, который не соответствует грамматике 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 . Поскольку это недействительный адрес электронной почты, при запуске сценария возникает следующая ошибка:

Неверный адрес электронной почты: Джон (строка 5)

Что усложняет устранение этих ошибок, так это то, что часто данные, которые вы передаете в функцию, не записываются в коде, а извлекаются из электронной таблицы, формы или другого внешнего источника данных. Использование приведенных ниже методов отладки может помочь вам определить причину этих ошибок.

Распространенные ошибки

Ниже приведен список распространенных ошибок и их причин.

Служба вызывалась слишком много раз: <имя действия>

Эта ошибка указывает на то, что вы превысили дневную квоту для данного действия. Например, вы можете столкнуться с этой ошибкой, если отправляете слишком много писем за один день. Квоты установлены на разных уровнях для потребительских, доменных и ведущих учетных записей и могут быть изменены в любое время без предварительного уведомления со стороны Google. Ограничения квот для различных действий можно просмотреть в документации по квотам Apps Script .

Сервер недоступен. или Произошла ошибка сервера, попробуйте еще раз.

Существует несколько возможных причин этих ошибок:

  • Сервер или система Google временно недоступны. Подождите несколько минут и попробуйте запустить сценарий еще раз.
  • В вашем скрипте есть ошибка, для которой нет соответствующего сообщения об ошибке. Попробуйте отладить свой скрипт и посмотрите, сможете ли вы изолировать проблему.
  • В скрипте Google Apps имеется ошибка, вызывающая эту ошибку. Инструкции по поиску и отправке отчетов об ошибках см. в разделе Ошибки . Прежде чем сообщать о новой ошибке, поищите, не сообщали ли о ней уже другие.

Для выполнения этого действия требуется авторизация.

Эта ошибка указывает на то, что сценарию не хватает авторизации, необходимой для запуска. Когда сценарий запускается в редакторе сценариев или из пользовательского пункта меню, пользователю отображается диалоговое окно авторизации. Однако, когда сценарий запускается из триггера, встроенного в страницу Сайтов Google или запускается как служба, диалоговое окно не может быть представлено и отображается эта ошибка.

Чтобы авторизовать скрипт, откройте редактор скриптов и запустите любую функцию. Появится запрос на авторизацию, чтобы вы могли авторизовать проект сценария. Если сценарий содержит новые неавторизованные службы, необходимо повторно авторизовать сценарий.

Эта ошибка часто возникает из-за того, что триггеры срабатывают до того, как пользователь их авторизовал. Если у вас нет доступа к проекту сценария (например, из-за того, что ошибка возникает в используемой вами надстройке ), вы обычно можете авторизовать сценарий, повторно используя надстройку. Если триггер продолжает срабатывать и вызывает эту ошибку, вы можете удалить триггеры, выполнив следующие действия:

  1. Слева от проекта Apps Script нажмите «Триггеры .
  2. Справа от триггера, который вы хотите удалить, нажмите Еще > Удалить триггер .

Вы также можете удалить проблемные триггеры надстройки, удалив надстройку .

Доступ запрещен: DriveApp или политика домена отключила сторонние приложения Диска.

Администраторы домены имеют возможность отключить Drive API для своего домена, что не позволяет их пользователям устанавливать и использовать приложения Google Drive. Этот параметр также не позволяет пользователям использовать надстройки Apps Script, использующие службу Drive или Advanced Drive Service (даже если сценарий был авторизован до того, как администратор отключил Drive API).

Однако если надстройка или веб-приложение, использующее службу Диска, публикуется для установки на уровне всего домена и устанавливается администратором для некоторых или всех пользователей в домене, сценарий работает для этих пользователей, даже если API Диска отключен в домен.

У сценария нет разрешения на получение удостоверения активного пользователя.

Указывает, что личность и адрес электронной почты активного пользователя недоступны для сценария. Это предупреждение возникает в результате вызова Session.getActiveUser() . Это также может быть результатом вызова Session.getEffectiveUser() если скрипт работает в режиме авторизации, отличном от AuthMode.FULL . Если выдается это предупреждение, последующие вызовы User.getEmail() возвращают только «».

Существует несколько способов устранения этого предупреждения в зависимости от режима авторизации, в котором выполняется сценарий. Режим авторизации отображается в триггерных функциях как свойство authMode параметра события e .

  • В AuthMode.FULL вместо этого рассмотрите возможность использования Session.getEffectiveUser() .
  • В AuthMode.LIMITED убедитесь, что владелец авторизовал сценарий.
  • В других режимах авторизации избегайте вызова любого метода.
  • Если вы клиент, впервые столкнувшийся с этим предупреждением от устанавливаемого триггера , убедитесь, что триггер запущен от имени пользователя в вашей организации.

Библиотека отсутствует

Если вы добавите в свой сценарий популярную библиотеку , вы можете получить сообщение об ошибке, в котором будет указано, что она отсутствует, даже если библиотека указана как зависимость вашего сценария. Причина может заключаться в том, что слишком много людей одновременно посещают библиотеку. Чтобы избежать этой ошибки, попробуйте одно из следующих решений:

  • Скопируйте и вставьте код библиотеки в свой скрипт и удалите зависимость библиотеки.
  • Скопируйте скрипт библиотеки и разверните его как библиотеку из своей учетной записи. Обязательно обновите зависимость в исходном скрипте до новой библиотеки вместо общедоступной.

Ошибка произошла из-за отсутствия версии библиотеки или версии развертывания. Код ошибки Not_Found

Это сообщение об ошибке указывает на одно из следующего:

  • Развернутая версия скрипта удалена. Чтобы обновить развернутую версию сценария, см. раздел Изменение развертывания с поддержкой версий .
  • Версия библиотеки, которую использует сценарий, удалена. Чтобы проверить, какая библиотека отсутствует, рядом с ее названием нажмите Дополнительно > Открыть в новой вкладке . Отсутствующая библиотека выдает сообщение об ошибке. Найдя библиотеку, которую необходимо обновить, выполните одно из следующих действий:
  • Сценарий библиотеки, которую использует ваш сценарий, включает в себя другую библиотеку, использующую удаленную версию. Выполните одно из следующих действий:
    • Если у вас есть доступ на редактирование библиотеки, которую использует ваш сценарий, обновите дополнительную библиотеку в этом сценарии до существующей версии.
    • Обновите библиотеку, чтобы использовать другую версию. См. Обновление библиотеки .
    • Удалите библиотеку из проекта сценария и кода. См. Удаление библиотеки .

Ошибка 400: valid_scope при вызове API Google Chat с помощью расширенной службы.

Если вы столкнулись с 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 могут включить белый список в консоли администратора, чтобы контролировать, к каким внешним доменам вы можете получить доступ через Apps Script.

Чтобы устранить эту ошибку, обратитесь к своему администратору, чтобы он добавил URL-адрес в белый список.

Отладка

Не все ошибки приводят к отображению сообщения об ошибке. Возможна более тонкая ошибка, когда код технически корректен и может выполняться, но результаты не соответствуют ожиданиям. Вот несколько стратегий для решения таких ситуаций и дальнейшего исследования сценария, который работает не так, как вы ожидаете.

Ведение журнала

Во время отладки часто бывает полезно записывать информацию о выполнении проекта сценария. Google Apps Script имеет два метода регистрации информации: облачную службу регистрации и более простые службы регистрации и консоли , встроенные в редактор Apps Script.

Дополнительную информацию см. в руководстве по ведению журнала .

Отчеты об ошибках

Исключения, возникающие из-за ошибок во время выполнения, автоматически регистрируются с помощью службы отчетов об ошибках Google Cloud. Эта служба позволяет искать и фильтровать сообщения об исключениях, создаваемые вашим проектом сценария.

Чтобы получить доступ к отчетам об ошибках, см. раздел «Просмотр журналов Cloud и отчетов об ошибках в консоли Google Cloud Platform» .

Казни

Каждый раз, когда вы запускаете скрипт, Apps Script записывает его выполнение, включая журналы Cloud. Эти записи помогут вам понять, какие действия выполнял ваш скрипт.

Чтобы просмотреть выполнение вашего скрипта в проекте Apps Script, слева нажмите «Выполнения .

Проверка статуса службы Apps Script

Хотя и редко, но иногда в определенных службах Google Workspace (например, Gmail или Диск) возникают временные проблемы, которые могут привести к сбоям в работе служб. В этом случае проекты Apps Script, взаимодействующие с этими службами, могут работать не так, как ожидалось.

Вы можете проверить, произошел ли сбой в работе службы Google Workspace, просмотрев панель состояния Google Workspace . Если в настоящее время наблюдается сбой, вы либо ждете, пока он будет устранен, либо обратитесь за дополнительной помощью в Справочный центр Google Workspace или в документацию по известным проблемам Google Workspace .

Используйте отладчик и точки останова

Чтобы обнаружить проблемы в сценарии, вы можете запустить его в режиме отладки. При запуске в режиме отладки сценарий приостанавливается, когда достигает точки останова — строки, выделенной вами в сценарии, которая, по вашему мнению, может иметь проблему. Когда сценарий приостанавливается, он отображает значение каждой переменной в этот момент времени, что позволяет вам проверить внутреннюю работу сценария без необходимости добавлять множество операторов журналирования.

Добавить точку останова

Чтобы добавить точку останова, наведите указатель мыши на номер строки, к которой вы хотите добавить точку останова. Слева от номера строки щелкните кружок. На изображении ниже показан пример точки останова, добавленной в скрипт:

Добавить точку останова

Запуск скрипта в режиме отладки

Чтобы запустить скрипт в режиме отладки, вверху редактора нажмите «Отладка» .

Прежде чем скрипт выполнит строку с точкой останова, он приостанавливается и отображает таблицу отладочной информации. Вы можете использовать эту таблицу для проверки данных, таких как значения параметров и информация, хранящаяся в объектах.

Чтобы контролировать выполнение сценария, в верхней части панели отладчика используйте кнопки «Вход», «Переход» и «Выход». Они позволяют запускать скрипт по одной строке и проверять, как значения изменяются с течением времени.

Проблемы с несколькими аккаунтами Google

Если вы вошли в несколько учетных записей Google одновременно, у вас могут возникнуть проблемы с доступом к надстройкам и веб-приложениям. Мультивход или одновременный вход в несколько учетных записей Google не поддерживается для Apps Script, надстроек и веб-приложений.

  • Если вы откроете редактор Apps Script, войдя в более чем одну учетную запись, Google предложит вам выбрать учетную запись, с которой вы хотите продолжить.

  • Если вы открываете веб-приложение или надстройку и испытываете проблемы с несколькими входами в систему, попробуйте одно из следующих решений:

    • Выйдите из всех своих учетных записей Google и войдите только в ту, в которой есть надстройка или веб-приложение, к которому вы хотите получить доступ.
    • Откройте окно инкогнито в Google Chrome или аналогичное окно частного просмотра и войдите в учетную запись Google, в которой есть надстройка или веб-приложение, к которому вы хотите получить доступ.

Получение помощи

Отладка проблемы с помощью перечисленных выше инструментов и методов может решить множество проблем, но могут возникнуть проблемы, для решения которых потребуется дополнительная помощь. Посетите нашу страницу поддержки , чтобы узнать, где задавать вопросы и сообщать об ошибках.