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 đầu tiên, khiến việc khắc phục sự cố trở thành một phần quan trọng trong quá trình phát triển. Trong phần này, chúng ta sẽ đề cập đến một số kỹ thuật có thể giúp bạn tìm, hiểu và gỡ lỗi trong tập lệnh.
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. Thông báo này đi kèm với số dòng dùng để khắc phục sự cố. Có hai loại lỗi cơ bản được hiển thị theo cách này: lỗi cú pháp và lỗi thời gian chạy.
Lỗi cú pháp
Lỗi cú pháp xảy ra do bạn viết mã không tuân theo cú pháp JavaScript và lỗi này sẽ được phát hiện ngay khi bạn cố gắng lưu tập lệnh. Ví dụ: đoạn mã sau đây chứa 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 đề về cú pháp ở đây là thiếu ký tự )
ở cuối dòng thứ bốn. Khi cố gắng lưu tập lệnh, bạn sẽ gặp lỗi sau:
Thiếu dấu ) sau danh sách đối số. (dòng 4)
Những loại lỗi này thường dễ khắc phục vì bạn có thể phát hiện ngay và thường có nguyên nhân đơn giản. Bạn không thể lưu một tệp chứa lỗi cú pháp, nghĩa là chỉ mã hợp lệ mới được lưu vào dự án.
Lỗi thời gian chạy
Những lỗi này là do sử dụng hàm hoặc lớp không đúng cách và chỉ có thể được phát hiện sau 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 định dạng chính xác, nhưng chúng ta đang truyền giá trị "john" cho địa chỉ email khi gọi MailApp.sendEmail
. Vì đây không phải là địa chỉ email hợp lệ nên lỗi sau sẽ xuất hiện khi chạy tập lệnh:
Email không hợp lệ: john (dòng 5)
Điều khiến những lỗi này khó khắc phục hơn là thường thì dữ liệu bạn đang truyền vào một hàm không được viết trong mã, mà được lấy từ bảng tính, biểu mẫu hoặc nguồn dữ liệu bên ngoài khác. Việc sử dụng các kỹ thuật gỡ lỗi dưới đây có thể giúp bạn xác định nguyên nhân gây ra các lỗi này.
Lỗi phổ biến
Dưới đâ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 rằng bạn đã vượt quá hạn mức hằng ngày cho một hành động nhất định. Ví dụ: bạn có thể gặp lỗi này nếu gửi quá nhiều email trong một ngày. Hạn mức được đặt ở các cấp khác nhau cho tài khoản cá nhân, tài khoản miền và tài khoản ưu tiên. Hạn mức này có thể thay đổi bất cứ lúc nào mà không cần Google thông báo trước. Bạn có thể xem các hạn mức hạn mức cho nhiều hành động 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.
Có một số nguyên nhân có thể gây ra những lỗi này:
- Một máy chủ hoặc hệ thống của Google tạm thời không hoạt động. Hãy đợi vài phút rồi thử chạy lại tập lệnh.
- Tập lệnh của bạn có lỗi nhưng không có thông báo lỗi tương ứng. Hãy thử gỡ lỗi tập lệnh và xem liệu bạn có thể tách riêng vấn đề hay không.
- Có một lỗi trong Google Apps Script đang gây ra lỗi này. Để biết hướng dẫn về cách tìm và gửi báo cáo lỗi, hãy xem phần Lỗi. Trước khi báo cáo lỗi mới, hãy tìm kiếm để xem liệu người khác đã báo cáo lỗi đó hay chưa.
Bạn cần được cho phép để thực hiện hành động đó.
Lỗi này cho biết tập lệnh thiếu quyền cần thiết để chạy. Khi một tập lệnh được chạy trong Trình chỉnh sửa tập lệnh hoặc từ một mục trình đơn tuỳ chỉnh, một hộp thoại uỷ quyền sẽ hiển thị cho người dùng. Tuy nhiên, khi một tập lệnh được chạy từ một điều kiện kích hoạt, được nhúng vào trang Google Sites hoặc chạy dưới dạng dịch vụ, thì hộp thoại sẽ không thể hiển thị và lỗi này sẽ xuất hiệ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 bất kỳ hàm nào. Lời nhắc uỷ quyền sẽ xuất hiện để bạn có thể uỷ quyền cho dự án tập lệnh. Nếu tập lệnh chứa các dịch vụ mới chưa được cấp quyền, bạn phải cấp lại quyền cho tập lệnh.
Lỗi này thường xảy ra do các trình kích hoạt đang kích hoạt trước khi người dùng uỷ quyền cho các trình kích hoạt đó. Nếu không có quyền truy cập vào dự án tập lệnh (ví dụ: lỗi xảy ra với một tiện ích bổ sung mà bạn sử dụng), thì thông thường, bạn có thể uỷ quyền cho tập lệnh bằng cách sử dụng lại tiện ích bổ sung đó. Nếu một điều kiện kích hoạt tiếp tục kích hoạt và gây ra lỗi này, bạn có thể xoá điều kiện kích hoạt bằng cách làm như sau:
- Ở bên trái dự án Apps Script, hãy nhấp vào biểu tượng Điều kiện kích hoạt .
- Ở bên phải điều kiện kích hoạt mà bạn muốn xoá, hãy nhấp vào biểu tượng Tuỳ chọn khác > Xoá điều kiện kích hoạt.
Bạn cũng có thể xoá các trình kích hoạt tiện ích bổ sung có vấn đề bằng cách gỡ cài đặt tiện ích bổ sung.
Từ chối quyền 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 của các miền có thể tắt API Drive cho miền của họ, ngăn người dùng cài đặt và sử dụng các ứng dụng Google Drive. Chế độ cài đặt này cũng ngăn người dùng sử dụng các tiện ích bổ sung Apps Script sử dụng Dịch vụ Drive hoặc Dịch vụ Drive nâng cao (ngay cả khi tập lệnh đã được uỷ quyền trước khi quản trị viên tắt API Drive).
Tuy nhiên, nếu một tiện ích bổ sung hoặc ứng dụng web sử dụng dịch vụ Drive được phát hành để cài đặt trên toàn miền và được quản trị viên cài đặt cho một số hoặc tất cả người dùng trong miền, thì tập lệnh sẽ hoạt động cho những người dùng đó ngay cả khi API Drive bị tắt trong miền.
Tập lệnh không có quyền lấy danh tính của người dùng đang hoạt động.
Cho biết rằng tập lệnh không có danh tính và email của người dùng đang hoạt động. Cảnh báo này là do lệnh gọi đến Session.getActiveUser()
.
Lỗi này cũng có thể xảy ra do lệnh gọi đến Session.getEffectiveUser()
nếu tập lệnh đang chạy ở chế độ uỷ quyền khác với AuthMode.FULL
.
Nếu cảnh báo này được báo hiệu, các lệnh gọi tiếp theo đến User.getEmail()
sẽ chỉ trả về "".
Có một số cách để khắc phục cảnh báo này, tuỳ thuộc vào chế độ uỷ quyền mà tập lệnh đang chạy. Chế độ uỷ quyền được hiển thị trong các hàm được kích hoạt dưới dạng thuộc tính authMode
của tham số sự kiện e
.
- Trong
AuthMode.FULL
, hãy cân nhắc sử dụngSession.getEffectiveUser()
. - Trong
AuthMode.LIMITED
, hãy đảm bảo rằng chủ sở hữu đã cho phép 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à một khách hàng mới trải nghiệm 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
Nếu thêm một thư viện phổ biến vào tập lệnh, bạn có thể nhận được thông báo lỗi cho biết thư viện đó bị thiếu, mặc dù thư viện được liệt kê là phần phụ thuộc cho tập lệnh. Lý do có thể là có quá nhiều người đang truy cập vào thư viện cùng một lúc. Để tránh lỗi này, hãy thử một trong các giải pháp sau:
- Sao chép và dán mã của thư viện vào tập lệnh rồi xoá phần phụ thuộc thư viện.
- Sao chép tập lệnh thư viện và triển khai tập lệnh đó dưới dạng thư viện trong tài khoản của bạn. Hãy nhớ cập nhật phần phụ thuộc trong tập lệnh ban đầu của bạn thành thư viện mới thay vì thư viện công khai.
Đã 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 vấn đề sau:
- Phiên bản đã triển khai của tập lệnh đã bị xoá. Để cập nhật phiên bản đã triển khai của tập lệnh, hãy xem phần Chỉnh sửa một bản triển khai có phiên bản.
- Phiên bản thư viện mà tập lệnh sử dụng đã bị xoá. Để kiểm tra thư viện nào bị thiếu, bên cạnh tên thư viện, hãy nhấp vào biểu tượng > Mở trong thẻ mới. Thư viện bị thiếu sẽ đưa ra thông báo lỗi. Sau khi tìm thấy thư viện cần cập nhật, hãy làm một trong những việc sau:
- Cập nhật thư viện để sử dụng một phiên bản khác. Xem phần Cập nhật thư viện.
- Xoá thư viện đã xoá khỏi dự án tập lệnh và mã. Xem bài viết Xoá thư viện.
Tuỳ chọn khác
- Tập lệnh của một thư viện mà tập lệnh của bạn sử dụng bao gồm một thư viện khác sử dụng phiên bản đã bị xoá. Hãy thực hiện một trong các hành động sau:
- Nếu bạn có quyền chỉnh sửa thư viện mà tập lệnh của bạn sử dụng, hãy cập nhật thư viện phụ trong tập lệnh đó lên phiên bản hiện có.
- Cập nhật thư viện để sử dụng một phiên bản khác. Xem phần Cập nhật thư viện.
- Xoá thư viện khỏi dự án tập lệnh và mã của bạn. Xem bài viết Xoá thư viện.
Lỗi 400: invalid_scope khi gọi API Google Chat 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
, thì tức là bạn chưa chỉ định bất kỳ 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 phạm vi mà tập lệnh cần, nhưng khi sử dụng dịch vụ nâng cao Chat, bạn phải thêm 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 theo cách thủ công. 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 như một phần của 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ể bật danh sách cho phép trong bảng điều khiển dành cho quản trị viên để kiểm soát những miền bên ngoài mà bạn có thể truy cập thông qua Apps Script.
Để khắc phục lỗi này, hãy liên hệ với quản trị viên để yêu cầu họ thêm URL vào danh sách cho phép.
Gỡ lỗi
Không phải lỗi nào cũng khiến thông báo lỗi xuất hiện. Có thể có một lỗi tinh vi hơn trong đó mã về mặt kỹ thuật là chính xác và có thể thực thi, nhưng kết quả không như bạn mong đợi. Sau đây là một số chiến lược để xử lý các tình huống như vậy và điều tra thêm về một tập lệnh không chạy theo cách bạn mong đợi.
Ghi nhật ký
Trong khi gỡ lỗi, bạn thường nên ghi lại thông tin khi dự án tập lệnh thực thi. Google Apps Script có hai phương thức ghi nhật ký thông tin: Dịch vụ ghi nhật ký trên đám mây và Dịch vụ nhật ký và bảng điều khiển cơ bản hơn được tích hợp sẵn trong trình soạn thảo Apps Script.
Hãy xem Hướng dẫn ghi nhật ký để biết thêm thông tin chi tiết.
Error Reporting
Các ngoại lệ xảy ra do lỗi thời gian chạy sẽ tự động được ghi lại bằng dịch vụ Báo cáo lỗi của Google Cloud. Dịch vụ này cho phép bạn tìm kiếm và lọc thông báo ngoại lệ mà dự án tập lệnh tạo ra.
Để truy cập vào tính năng Báo cáo lỗi, hãy xem bài viết Xem nhật ký Cloud và báo cáo lỗi trong bảng điều khiển Google Cloud Platform.
Thực thi
Mỗi khi bạn chạy một tập lệnh, Apps Script sẽ ghi lại quá trình thực thi, bao gồm cả nhật ký trên đám mây. Các bản ghi này có thể giúp bạn hiểu được tập lệnh của mình đã thực hiện những hành động nào.
Để xem các lần thực thi tập lệnh trong dự án Apps Script, ở bên trái, hãy nhấp vào biểu tượng Lần thực thi
.Kiểm tra trạng thái dịch vụ Apps Script
Mặc dù hiếm khi xảy ra, nhưng đôi khi một số dịch vụ cụ thể của Google Workspace (chẳng hạn như Gmail hoặc Drive) gặp phải các vấn đề tạm thời có thể dẫn đến tình trạng ngừng cung cấp dịch vụ. Khi điều này xảy ra, các dự án Apps Script tương tác với các dịch vụ này có thể không hoạt động như mong đợi.
Bạn có thể kiểm tra xem dịch vụ Google Workspace có bị gián đoạn hay không bằng cách xem Trang tổng quan trạng thái Google Workspace. Nếu đang gặp sự cố ngừng hoạt động, bạn có thể chờ sự cố được khắc phục hoặc yêu cầu trợ giúp thêm trong Trung tâm trợ giúp của Google Workspace hoặc tài liệu Các sự cố đã biết của Google Workspace.
Sử dụng trình gỡ lỗi và điểm ngắt
Để tìm 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, tập lệnh sẽ tạm dừng khi gặp điểm ngắt, đây là dòng bạn đã làm nổi bật trong tập lệnh mà bạn cho là 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 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 điểm ngắt, hãy di chuột qua 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:
Chạy tập lệnh ở chế độ gỡ lỗi
Để chạy tập lệnh ở chế độ gỡ lỗi, ở đầu trình chỉnh sửa, hãy nhấp vào Gỡ lỗi.
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ị 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 thông 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 lệnh 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.
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, thì bạn có thể gặp sự cố khi truy cập các 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 soạn thảo Apps Script khi đăng nhập vào nhiều tài khoản, Google sẽ nhắc bạn chọn tài khoản mà 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
Việc gỡ lỗi một vấn đề bằng các công cụ và kỹ thuật nêu trên có thể giải quyết nhiều vấn đề, nhưng có thể bạn sẽ gặp phải một số vấn đề cần được trợ giúp thêm để giải quyết. Hãy xem trang Hỗ trợ của chúng tôi để biết thông tin về nơi đặt câu hỏi và báo lỗi.