Khắc phục sự cố

Ngay cả nhà phát triển giàu kinh nghiệm nhất cũng hiếm khi viết mã chính xác ngay từ lần thử đầu tiên, vì vậy, việc khắc phục sự cố là một phần quan trọng trong quy trình phát triển. Phần này đề cập đến các kỹ thuật tìm, hiểu và gỡ lỗi trong tập lệnh của bạn.

Thông báo lỗi

Khi tập lệnh gặp lỗi, một thông báo lỗi sẽ xuất hiện cùng với số dòng. Có hai loại lỗi cơ bản: lỗi cú pháplỗi thời gian chạy.

Lỗi cú pháp

Lỗi cú pháp xảy ra khi mã không tuân theo ngữ pháp JavaScript và được phát hiện khi bạn lưu tập lệnh. Ví dụ: đoạn mã sau đây chứa một lỗi cú pháp:

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);
}

Vấn đề là thiếu ký tự ) ở cuối dòng 4. Khi bạn lưu tập lệnh, lỗi sau sẽ xuất hiện:

Thiếu dấu ) sau danh sách đối số. (dòng 4)

Những lỗi này được phát hiện ngay lập tức, giúp bạn dễ dàng khắc phục sự cố. Chỉ mã hợp lệ mới được lưu vào dự án của bạn.

Lỗi thời gian chạy

Lỗi thời gian chạy xảy ra khi một hàm hoặc lớp được sử dụng không chính xác và được phát hiện khi tập lệnh chạy. Ví dụ: mã sau đây gây ra lỗi thời gian chạy:

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);
}

Mặc dù mã được định dạng chính xác, nhưng "john" là một địa chỉ email không hợp lệ. Lỗi sau đây sẽ xảy ra:

Email không hợp lệ: john (dòng 5)

Những lỗi này rất khó xử lý vì dữ liệu thường được lấy từ các nguồn bên ngoài như bảng tính hoặc biểu mẫu. Sử dụng các kỹ thuật gỡ lỗi để xác định nguyên nhân.

Lỗi thường gặp

Sau đây là danh sách các lỗi thường gặp và nguyên nhân gây ra lỗi.

Dịch vụ bị gọi quá nhiều lần: <action name>

Lỗi này cho biết bạn đã vượt quá hạn mức hằng ngày cho một hành động, chẳng hạn như gửi quá nhiều email. Hạn mức thay đổi tuỳ theo loại tài khoản và có thể thay đổi. Xem các giới hạn trong tài liệu về hạn mức của Apps Script.

Máy chủ không hoạt động. hoặc Đã xảy ra lỗi máy chủ, vui lòng thử lại.

Nguyên nhân có thể là:

  • Một máy chủ của Google tạm thời không hoạt động. Hãy đợi rồi thử lại.
  • Một lỗi trong tập lệnh của bạn không có thông báo tương ứng. Hãy thử gỡ lỗi để xác định vấn đề.
  • Google Apps Script có lỗi. Tìm kiếm và gửi báo cáo lỗi trong Lỗi.

Bạn cần được cho phép để thực hiện hành động đó.

Tập lệnh không có quyền cần thiết để chạy. Khi tập lệnh chạy từ một trình kích hoạt hoặc dưới dạng một dịch vụ, bạn không thể trình bày hộp thoại uỷ quyền.

Để uỷ quyền cho tập lệnh, hãy mở trình chỉnh sửa tập lệnh rồi chạy một hàm bất kỳ. Nếu tập lệnh sử dụng các dịch vụ mới chưa được uỷ quyền, bạn phải uỷ quyền lại cho tập lệnh đó.

Các điều kiện kích hoạt được kích hoạt trước khi uỷ quyền hoặc sau khi hết hạn thường gây ra lỗi này. Nếu một tiện ích bổ sung gây ra vấn đề này, hãy dùng lại tiện ích bổ sung đó để uỷ quyền lại. Xoá các điều kiện kích hoạt có vấn đề:

  1. Trong dự án Apps Script, hãy nhấp vào Triggers (Trình kích hoạt) .
  2. Bên cạnh điều kiện kích hoạt, hãy nhấp vào Tuỳ chọn khác > Xoá điều kiện kích hoạt.

Hoặc gỡ cài đặt tiện ích bổ sung.

Quyền chi tiết cũng có thể gây ra những lỗi này. Xem trang phạm vi uỷ quyền để bảo vệ việc thực thi các điều kiện kích hoạt.

Bị từ chối truy cập: DriveApp hoặc Chính sách miền đã tắt các ứng dụng Drive của bên thứ ba

Quản trị viên Google Workspace có thể vô hiệu hoá Drive API cho miền của họ. Việc này sẽ ngăn người dùng sử dụng các ứng dụng Drive hoặc tiện ích bổ sung Apps Script dùng dịch vụ Drive.

Nếu một tiện ích bổ sung hoặc ứng dụng web được xuất bản để cài đặt trên toàn miền và do quản trị viên cài đặt, thì tập lệnh sẽ hoạt động ngay cả khi API Drive bị vô hiệu hoá.

Tập lệnh không có quyền lấy danh tính của người dùng đang hoạt động.

Không có thông tin nhận dạng và email của người dùng đang hoạt động. Điều này là do các lệnh gọi đến Session.getActiveUser() hoặc Session.getEffectiveUser() trong các chế độ uỷ quyền khác với AuthMode.FULL. Nếu tập lệnh của bạn chạy trên một điều kiện kích hoạt, bạn có thể tìm thấy chế độ uỷ quyền trong thuộc tính authMode của đối tượng sự kiện Apps Script.

Khắc phục sự cố này dựa trên chế độ uỷ quyền:

  • Trong AuthMode.FULL, hãy cân nhắc sử dụng Session.getEffectiveUser().
  • Trong AuthMode.LIMITED, hãy đảm bảo rằng chủ sở hữu đã uỷ quyền cho tập lệnh.
  • Trong các chế độ uỷ quyền khác, hãy tránh gọi một trong hai phương thức này.
  • Nếu bạn là khách hàng mới của Google Workspace và đang gặp phải cảnh báo này từ một trình kích hoạt có thể cài đặt, hãy đảm bảo rằng trình kích hoạt đang chạy dưới dạng người dùng trong tổ chức của bạn.

Thiếu thư viện

Một thư viện có thể bị báo cáo là thiếu nếu có quá nhiều người truy cập cùng lúc. Cách giải quyết:

  • Sao chép mã của thư viện trực tiếp vào tập lệnh.
  • Sao chép và triển khai thư viện từ tài khoản của riêng bạn.
  • Nếu tập lệnh của bạn không cần thư viện để hoạt động, hãy xoá thư viện đó khỏi dự án tập lệnh.

Đã xảy ra lỗi do thiếu một phiên bản thư viện hoặc phiên bản triển khai. Mã lỗi Not_Found

Thông báo lỗi này cho biết một trong những điều sau:

  • Phiên bản tập lệnh mà một bản triển khai sử dụng đã bị xoá. Để giải quyết vấn đề này, hãy chỉnh sửa việc triển khai và chọn một phiên bản tập lệnh khác.
  • Một phiên bản thư viện mà tập lệnh sử dụng đã bị xoá. Để giải quyết vấn đề này, trong trình chỉnh sửa tập lệnh ở mục "Thư viện", hãy tìm thư viện rồi cập nhật lên một phiên bản khác hoặc xoá thư viện đó. Để cập nhật, hãy nhấp vào số phiên bản rồi chọn một phiên bản khác. Để xoá, hãy nhấp vào biểu tượng Tuỳ chọn khác > Xoá.
  • Một thư viện bao gồm một thư viện khác và phiên bản của thư viện đó đã bị xoá. Để giải quyết vấn đề này, hãy liên hệ với tác giả của thư viện hoặc sử dụng một phiên bản khác của thư viện mà tập lệnh của bạn sử dụng.

Lỗi 400: invalid_scope khi gọi Google Chat API bằng dịch vụ nâng cao

Nếu bạn gặp Error 400: invalid_scope với thông báo lỗi Some requested scopes cannot be shown, tức là bạn chưa chỉ định phạm vi uỷ quyền nào trong tệp appsscript.json của dự án Apps Script. Trong hầu hết các trường hợp, Apps Script sẽ tự động xác định những phạm vi mà một tập lệnh cần, nhưng khi sử dụng dịch vụ nâng cao của Chat, bạn phải tự thêm các phạm vi uỷ quyền mà tập lệnh sử dụng vào tệp kê khai của dự án Apps Script. Xem phần Đặt phạm vi rõ ràng.

Để giải quyết lỗi này, hãy thêm các phạm vi uỷ quyền thích hợp vào tệp appsscript.json của dự án Apps Script trong mảng oauthScopes. Ví dụ: để gọi phương thức spaces.messages.create, hãy thêm nội dung sau:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

Quản trị viên của bạn không cho phép thực hiện các lệnh gọi UrlFetch đến <URL>

Quản trị viên Google Workspace có thể sử dụng danh sách cho phép để kiểm soát quyền truy cập vào miền bên ngoài. Hãy liên hệ với quản trị viên để thêm URL vào danh sách cho phép.

Gỡ lỗi

Một số lỗi không rõ ràng và không kích hoạt thông báo. Ví dụ: mã của bạn có thể thực thi, nhưng kết quả không như mong đợi. Hãy sử dụng các chiến lược sau để điều tra những tập lệnh hoạt động không như mong đợi.

Ghi nhật ký

Ghi lại thông tin khi tập lệnh thực thi bằng dịch vụ ghi nhật ký trên đám mây hoặc dịch vụ Logger và console trong trình chỉnh sửa tập lệnh.

Error Reporting

Để sử dụng Error Reporting trong Google Cloud, hãy sử dụng một dự án tiêu chuẩn do người dùng quản lý thay vì một dự án mặc định.

Khi bạn sử dụng một dự án chuẩn, các lỗi thời gian chạy sẽ tự động được ghi lại trong Google Cloud Error Reporting. Xem nhật ký và báo cáo lỗi trên Cloud trong bảng điều khiển Cloud.

Thực thi

Google Apps Script ghi lại mọi lần thực thi, kể cả nhật ký Cloud. Để xem các lần thực thi, hãy nhấp vào Thực thi .

Kiểm tra trạng thái dịch vụ

Kiểm tra tình trạng ngừng dịch vụ Google Workspace trên Trang tổng quan trạng thái Google Workspace.

Sử dụng trình gỡ lỗi và điểm ngắt

Để xác định vị trí các vấn đề trong tập lệnh, bạn có thể chạy tập lệnh ở chế độ gỡ lỗi. Khi chạy ở chế độ gỡ lỗi, một tập lệnh sẽ tạm dừng khi gặp điểm ngắt. Đây là dòng mà bạn đã đánh dấu trong tập lệnh và cho rằng có thể gặp vấn đề. Khi một tập lệnh tạm dừng, tập lệnh sẽ hiển thị giá trị của từng biến tại thời điểm đó, cho phép bạn kiểm tra hoạt động bên trong của một tập lệnh mà không cần thêm nhiều câu lệnh ghi nhật ký.

Thêm điểm ngắt

Để thêm một điểm ngắt, hãy di chuột lên số dòng của dòng mà bạn muốn thêm điểm ngắt. Ở bên trái số dòng, hãy nhấp vào vòng tròn. Hình ảnh bên dưới cho thấy ví dụ về một điểm ngắt được thêm vào tập lệnh:

Thêm điểm ngắt

Chạy tập lệnh ở chế độ gỡ lỗi

Để chạy tập lệnh ở chế độ gỡ lỗi, hãy nhấp vào Gỡ lỗi ở đầu trình chỉnh sửa.

Trước khi tập lệnh chạy dòng có điểm ngắt, tập lệnh sẽ tạm dừng và hiển thị một bảng thông tin gỡ lỗi. Bạn có thể sử dụng bảng này để kiểm tra dữ liệu như giá trị của các tham số và thông tin được lưu trữ trong các đối tượng.

Để kiểm soát cách chạy tập lệnh, ở đầu bảng điều khiển Trình gỡ lỗi, hãy sử dụng các nút "Bước vào", "Bước qua" và "Bước ra". Các tuỳ chọn này cho phép bạn chạy tập lệnh từng dòng một và kiểm tra cách các giá trị thay đổi theo thời gian.

Lỗi: Không có mã nguồn cho dòng hiện tại

Không có mã nguồn cho dòng hiện tại

Lỗi này xuất hiện khi không có tệp gỡ lỗi đang hoạt động. Google Apps Script không hỗ trợ việc hiển thị các tập lệnh JavaScript (JS) được tạo động trong trình chỉnh sửa tập lệnh, chẳng hạn như các tập lệnh được tạo bằng eval()new Function(). Các tập lệnh này được tạo và thực thi trong công cụ V8 nhưng không được biểu thị dưới dạng các tệp độc lập trong trình chỉnh sửa. Nếu bạn đi vào các tập lệnh này, bạn sẽ gặp phải lỗi này.

Ví dụ: hãy xem xét đoạn mã sau:

function myFunction() {
  eval('a=2');
}

Khi eval() được gọi, đối số của nó sẽ được coi là mã JS và chạy dưới dạng một tập lệnh được tạo động bên trong công cụ V8. Nếu bạn bước vào eval(), lỗi này sẽ xuất hiện. Nếu tập lệnh có chú thích //# sourceURL, tên của chú thích đó sẽ xuất hiện trong ngăn xếp lệnh gọi. Nếu không, mục này sẽ xuất hiện dưới dạng một mục không có tên.

Mặc dù có thông báo lỗi, phiên gỡ lỗi vẫn hoạt động và quá trình thực thi có thể tiếp tục. Để tiếp tục, hãy chuyển sang bước vào, bước ra hoặc tiếp tục thực thi. Tuy nhiên, lỗi này vẫn tiếp tục xuất hiện miễn là quá trình thực thi vẫn nằm trong phạm vi của tập lệnh động. Sau khi quá trình thực thi thoát khỏi tập lệnh động, quá trình gỡ lỗi sẽ tiếp tục mà không gặp lỗi này.

Vấn đề khi đăng nhập vào nhiều Tài khoản Google

Nếu đăng nhập vào nhiều Tài khoản Google cùng lúc, bạn có thể gặp sự cố khi truy cập vào tiện ích bổ sung và ứng dụng web. Tính năng đăng nhập nhiều tài khoản, hay đăng nhập vào nhiều Tài khoản Google cùng lúc, không được hỗ trợ đối với Apps Script, tiện ích bổ sung hoặc ứng dụng web.

  • Nếu bạn mở trình chỉnh sửa Apps Script trong khi đăng nhập vào nhiều tài khoản, Google sẽ nhắc bạn chọn tài khoản bạn muốn tiếp tục.

  • Nếu bạn mở một ứng dụng web hoặc tiện ích bổ sung và gặp vấn đề khi đăng nhập nhiều tài khoản, hãy thử một trong các giải pháp sau:

    • Đăng xuất khỏi tất cả Tài khoản Google của bạn và chỉ đăng nhập vào tài khoản có tiện ích bổ sung hoặc ứng dụng web mà bạn muốn truy cập.
    • Mở một cửa sổ ẩn danh trong Google Chrome hoặc một cửa sổ duyệt web ở chế độ riêng tư tương đương, rồi đăng nhập vào Tài khoản Google có tiện ích bổ sung hoặc ứng dụng web mà bạn muốn truy cập.

Nhận trợ giúp

Truy cập trang Hỗ trợ của chúng tôi để đặt câu hỏi hoặc báo cáo lỗi.