Khắc phục sự cố và câu hỏi thường gặp về Crashlytics


Trang này cung cấp trợ giúp khắc phục sự cố và câu trả lời cho các câu hỏi thường gặp về việc sử dụng Crashlytics. Nếu bạn không tìm thấy nội dung mình cần hoặc cần được trợ giúp thêm, hãy liên hệ với Nhóm hỗ trợ Firebase.

Khắc phục sự cố chung/Câu hỏi thường gặp

Bạn có thể nhận thấy hai định dạng khác nhau cho các vấn đề được liệt kê trong bảng Vấn đề trong bảng điều khiển Firebase. Bạn cũng có thể nhận thấy một tính năng có tên là "biến thể" trong một số vấn đề. Sau đây là lý do!

Vào đầu năm 2023, chúng tôi đã ra mắt một công cụ phân tích cải tiến để phân nhóm các sự kiện, cũng như thiết kế mới và một số tính năng nâng cao cho các vấn đề mới (chẳng hạn như biến thể!). Hãy xem bài đăng gần đây trên blog của chúng tôi để biết tất cả thông tin chi tiết. Bạn cũng có thể đọc phần dưới đây để biết thông tin nổi bật.

Crashlytics phân tích tất cả sự kiện trong ứng dụng của bạn (chẳng hạn như sự cố, sự cố không nghiêm trọng và lỗi ANR) và tạo các nhóm sự kiện được gọi là vấn đề – tất cả sự kiện trong một vấn đề đều có điểm lỗi chung.

Để nhóm các sự kiện thành những vấn đề này, công cụ phân tích cải tiến hiện xem xét nhiều khía cạnh của sự kiện, bao gồm các khung trong dấu vết ngăn xếp, thông báo ngoại lệ, mã lỗi và các đặc điểm khác của nền tảng hoặc loại lỗi.

Tuy nhiên, trong nhóm sự kiện này, dấu vết ngăn xếp dẫn đến lỗi có thể khác nhau. Dấu vết ngăn xếp khác nhau có thể có nghĩa là nguyên nhân gốc rễ khác nhau. Để thể hiện sự khác biệt có thể có này trong một vấn đề, giờ đây, chúng ta tạo các biến thể trong các vấn đề – mỗi biến thể là một nhóm con của các sự kiện trong một vấn đề có cùng một điểm lỗi một dấu vết ngăn xếp tương tự. Với các biến thể, bạn có thể gỡ lỗi các dấu vết ngăn xếp phổ biến nhất trong một vấn đề và xác định xem có nhiều nguyên nhân gốc rễ dẫn đến lỗi hay không.

Dưới đây là những điểm cải tiến mà bạn sẽ thấy:

  • Siêu dữ liệu được cải tiến hiển thị trong hàng vấn đề
    Giờ đây, bạn có thể dễ dàng hiểu và phân loại các vấn đề trong ứng dụng.

  • Ít vấn đề trùng lặp hơn
    Việc thay đổi số dòng không dẫn đến vấn đề mới.

  • Dễ dàng gỡ lỗi các vấn đề phức tạp với nhiều nguyên nhân gốc
    Sử dụng biến thể để gỡ lỗi các dấu vết ngăn xếp phổ biến nhất trong một vấn đề.

  • Các cảnh báo và tín hiệu có ý nghĩa hơn
    Một vấn đề mới thực sự đại diện cho một lỗi mới.

  • Tìm kiếm hiệu quả hơn
    Mỗi vấn đề chứa nhiều siêu dữ liệu có thể tìm kiếm hơn, chẳng hạn như loại ngoại lệ và tên gói.

Sau đây là cách triển khai các điểm cải tiến này:

  • Khi nhận được sự kiện mới từ ứng dụng của bạn, chúng tôi sẽ kiểm tra xem các sự kiện đó có khớp với vấn đề hiện có hay không.

  • Nếu không có sự trùng khớp, chúng tôi sẽ tự động áp dụng thuật toán nhóm sự kiện thông minh hơn cho sự kiện đó và tạo một vấn đề mới với thiết kế siêu dữ liệu được cải tiến.

Đây là lần cập nhật lớn đầu tiên mà chúng tôi thực hiện đối với tính năng nhóm sự kiện. Nếu bạn có ý kiến phản hồi hoặc gặp vấn đề, vui lòng cho chúng tôi biết bằng cách gửi báo cáo .

Nếu bạn không thấy các chỉ số không gặp sự cố (chẳng hạn như số phiên và số người dùng không gặp sự cố) và/hoặc cảnh báo về tốc độ, hãy đảm bảo rằng bạn đang sử dụngSDK Crashlytics phiên bản 10.8.0 trở lên.

Nếu không thấy nhật ký đường dẫn, bạn nên kiểm tra cấu hình của ứng dụng cho Google Analytics. Hãy đảm bảo rằng bạn đáp ứng các yêu cầu sau:

Để tải dSYM của dự án lên và nhận kết quả chi tiết, hãy kiểm tra những điều sau:

  1. Đảm bảo giai đoạn xây dựng của dự án chứa tập lệnh chạy Crashlytics, cho phép Xcode tải dSYM của dự án lên tại thời điểm tạo bản dựng (hãy đọc phần Khởi chạy Crashlytics để biết hướng dẫn về cách thêm tập lệnh). Sau khi cập nhật dự án, hãy buộc xảy ra sự cố và xác nhận rằng sự cố đó xuất hiện trong trang tổng quan Crashlytics.

  2. Nếu bạn thấy cảnh báo "Thiếu dSYM" trong bảng điều khiển Firebase, hãy kiểm tra Xcode để đảm bảo rằng Xcode đang tạo dSYM đúng cách cho bản dựng.

  3. Nếu Xcode đang tạo dSYM đúng cách và bạn vẫn thấy thiếu dSYM, thì có thể công cụ chạy tập lệnh đang bị treo trong khi tải dSYM lên. Trong trường hợp này, hãy thử từng cách sau:

    • Đảm bảo bạn đang sử dụng phiên bản Crashlytics mới nhất.

    • Tải các tệp dSYM bị thiếu lên theo cách thủ công:

      • Cách 1: Sử dụng tuỳ chọn "Kéo và thả" dựa trên bảng điều khiển trong thẻ dSYM để tải tệp lưu trữ zip chứa các tệp dSYM bị thiếu lên.
      • Cách 2: Sử dụng tập lệnh upload-symbols để tải các tệp dSYM bị thiếu lên cho các UUID được cung cấp trong thẻ dSYM.
  4. Nếu bạn vẫn thấy thiếu tệp dSYM hoặc vẫn không tải lên được, hãy liên hệ với Nhóm hỗ trợ Firebase và nhớ đính kèm nhật ký của bạn.

Nếu dấu vết ngăn xếp của bạn có vẻ được biểu tượng hoá không tốt, hãy kiểm tra những điều sau:

  • Nếu các khung từ thư viện của ứng dụng thiếu tham chiếu đến mã của ứng dụng, hãy đảm bảo rằng -fomit-frame-pointer không được đặt làm cờ biên dịch.

  • Nếu bạn thấy một số khung (Missing) cho thư viện của ứng dụng, hãy kiểm tra xem có dSYM không bắt buộc nào được liệt kê là bị thiếu (đối với phiên bản ứng dụng bị ảnh hưởng) trong thẻ dSYM Crashlytics của bảng điều khiển Firebase hay không. Nếu có, hãy làm theo bước khắc phục sự cố "Thiếu cảnh báo dSYM" trong phần Câu hỏi thường gặp về việc thiếu/không tải dSYM lên trên trang này. Xin lưu ý rằng việc tải các dSYM này lên sẽ không biểu tượng hoá các sự cố đã xảy ra, nhưng sẽ giúp đảm bảo việc biểu tượng hoá cho các sự cố trong tương lai.

Ghi chú cho phép các thành viên trong dự án bình luận về các vấn đề cụ thể bằng câu hỏi, thông tin cập nhật về trạng thái, v.v.

Khi một thành viên trong dự án đăng ghi chú, ghi chú đó sẽ được gắn nhãn bằng email của Tài khoản Google của họ. Địa chỉ email này cùng với ghi chú sẽ hiển thị cho tất cả thành viên dự án có quyền xem ghi chú.

Phần sau đây mô tả quyền truy cập cần thiết để xem, ghi và xoá ghi chú:

Xem bài viết Tìm hiểu về các chỉ số không gặp sự cố.

Ghi chú cho phép các thành viên trong dự án bình luận về các vấn đề cụ thể bằng câu hỏi, thông tin cập nhật về trạng thái, v.v.

Khi một thành viên trong dự án đăng ghi chú, ghi chú đó sẽ được gắn nhãn bằng email của Tài khoản Google của họ. Địa chỉ email này cùng với ghi chú sẽ hiển thị cho tất cả thành viên dự án có quyền xem ghi chú.

Phần sau đây mô tả quyền truy cập cần thiết để xem, ghi và xoá ghi chú:

Tích hợp

Nếu dự án của bạn sử dụng Crashlytics cùng với SDK Google Mobile Ads, thì có thể trình báo cáo sự cố đang can thiệp khi đăng ký trình xử lý ngoại lệ. Để khắc phục vấn đề này, hãy tắt tính năng báo cáo sự cố trong SDK Mobile Ads bằng cách gọi disableSDKCrashReporting.

Sau khi bạn liên kết Crashlytics với BigQuery, các tập dữ liệu mới mà bạn tạo sẽ tự động nằm ở Hoa Kỳ, bất kể vị trí của dự án Firebase.

Hỗ trợ nền tảng

Có, bạn có thể triển khai Crashlytics trong các dự án macOS và tvOS. Hãy nhớ đưa SDK Firebase phiên bản 8.9.0 trở lên vào Google Analytics để các sự cố có quyền truy cập vào các chỉ số do Google Analytics thu thập (người dùng không gặp sự cố, bản phát hành mới nhất, cảnh báo về tốc độ và nhật ký đường dẫn).

Giờ đây, bạn có thể báo cáo sự cố cho nhiều ứng dụng trong một dự án Firebase, ngay cả khi các ứng dụng được tạo cho nhiều nền tảng Apple (ví dụ: iOS, tvOS và Mac Catalyst). Trước đây, bạn cần tách các ứng dụng thành các dự án Firebase riêng lẻ nếu các ứng dụng đó chứa cùng một mã gói.

Vấn đề hồi quy

Một vấn đề đã hồi quy khi bạn đã đóng vấn đề trước đó nhưng Crashlytics nhận được một báo cáo mới cho biết vấn đề đã tái diễn. Crashlytics sẽ tự động mở lại các vấn đề hồi quy này để bạn có thể giải quyết các vấn đề đó cho phù hợp với ứng dụng của mình.

Dưới đây là một tình huống mẫu giải thích cách Crashlytics phân loại một vấn đề là hồi quy:

  1. Lần đầu tiên, Crashlytics nhận được báo cáo sự cố về Sự cố "A". Crashlytics sẽ mở một vấn đề tương ứng cho sự cố đó (Vấn đề "A").
  2. Bạn nhanh chóng khắc phục lỗi này, đóng Vấn đề "A" rồi phát hành phiên bản mới của ứng dụng.
  3. Crashlytics nhận được một báo cáo khác về Vấn đề "A" sau khi bạn đóng vấn đề.
    • Nếu báo cáo là của một phiên bản ứng dụng mà Crashlytics biết khi bạn đóng vấn đề (nghĩa là phiên bản đã gửi báo cáo sự cố cho mọi sự cố), thì Crashlytics sẽ không coi vấn đề là hồi quy. Vấn đề này sẽ vẫn được đóng.
    • Nếu báo cáo đến từ một phiên bản ứng dụng mà Crashlytics không biết khi bạn đóng vấn đề (nghĩa là phiên bản đó chưa bao giờ gửi bất kỳ báo cáo sự cố nào cho bất kỳ sự cố nào), thì Crashlytics sẽ xem xét vấn đề đã hồi quy và sẽ mở lại vấn đề.

Khi một vấn đề hồi quy, chúng tôi sẽ gửi một cảnh báo phát hiện hồi quy và thêm một tín hiệu hồi quy vào vấn đề đó để cho bạn biết rằng Crashlytics đã mở lại vấn đề. Nếu bạn không muốn một vấn đề mở lại do thuật toán hồi quy của chúng tôi, hãy "tắt tiếng" vấn đề đó thay vì đóng vấn đề.

Nếu một báo cáo đến từ một phiên bản ứng dụng cũ chưa bao giờ gửi báo cáo sự cố nào khi bạn đóng vấn đề, thì Crashlytics sẽ coi vấn đề đó là hồi quy và sẽ mở lại vấn đề.

Trường hợp này có thể xảy ra trong trường hợp sau: Bạn đã khắc phục lỗi và phát hành phiên bản mới của ứng dụng, nhưng vẫn có người dùng sử dụng phiên bản cũ hơn mà không có bản sửa lỗi. Nếu tình cờ một trong những phiên bản cũ đó chưa bao giờ gửi báo cáo sự cố nào khi bạn đóng vấn đề và người dùng bắt đầu gặp lỗi, thì các báo cáo sự cố đó sẽ kích hoạt vấn đề hồi quy.

Nếu bạn không muốn một vấn đề mở lại do thuật toán hồi quy của chúng tôi, hãy "tắt tiếng" vấn đề đó thay vì đóng vấn đề.