Dùng LogBrew Swift 0.1.6 trở lên. Dùng LogBrew CLI native 0.1.24 trở lên để
tải lên artifact (tệp bản dựng) dùng cho gỡ lỗi.
Xác định phạm vi ghi nhận
Kiểm tra thời điểm ứng dụng có thể gửi lại từng loại lỗi.
Đặt giá trị bản phát hành trước khi build. Giá trị này phải xác định được phiên
bản và số build của ứng dụng. Dùng cùng giá trị này trong SDK, khi tải lên dSYM
và trong bộ lọc vấn đề.
Không đính kèm payload của người dùng, body yêu cầu hoặc header vào metadata
crash.
Thêm product crash
Trước tiên, thiết lập telemetry cho ứng dụng theo hướng dẫn Tích hợp SDK. Quá trình gửi lại dùngclient và transport đó.
Thêm SDK công khai qua Swift Package Manager.
LogBrew để gửi telemetry. Chỉ thêm LogBrewCrash khi ứng dụng
chủ động bật ghi nhận crash hoặc treo native.
Tích hợp ghi nhận hỗ trợ iOS 15 trở lên. Chỉ giữ một đối tượng ghi nhận do ứng
dụng sở hữu, vì trình xử lý crash fatal native áp dụng cho toàn bộ tiến trình.
Cấu hình một định danh chính xác
Dùng cùng dự án, bản phát hành, môi trường và dịch vụ khi thiết lập runtime và khi tải lên artifact. LogBrew không tự suy ra hay thay thế các giá trị này.NativeCrashConfiguration có hai giới hạn không bắt buộc:
Giá trị nằm ngoài phạm vi khiến cấu hình ném lỗi
crash_invalid_configuration.
Bật ghi nhận treo
Ghi nhận treo tắt khiwatchdog là nil. Để bật, thay khai báo watchdog ở
trên trước khi gọi install():
artifactIdentity. Nếu thiếu, cấu hình ném lỗi
crash_invalid_configuration.
Giữ một đối tượng crashCapture duy nhất trong suốt vòng đời của tiến trình.
Đối tượng ghi nhận thứ hai không cài được. Lệnh gọi install() của nó ném lỗi
crash_capture_owned. Để đổi ngưỡng, dùng giá trị mới ở lần khởi chạy ứng dụng
sau.
Treo đã hồi phục được gửi lại với crash.handled đặt thành true. Treo vẫn
đang diễn ra khi tiến trình bị chấm dứt được gửi lại với crash.handled đặt
thành false.
Cả hai dạng đều có metadata dạng số durationMs. Chúng giữ cùng định danh
artifact mà các khung của crash fatal sử dụng.
Watchdog tạm dừng khi ứng dụng không ở trạng thái hoạt động hoặc đang chạy dưới
debugger. Watchdog cũng ngừng ghi nhận khi thiết bị chịu áp lực nhiệt nghiêm
trọng.
Ngưỡng ngắn có thể báo công việc bình thường trên luồng chính thành treo. Kiểm
tra ngưỡng với cấu hình build mà bạn phát hành. Trạng thái đã xử lý mô tả việc
hồi phục. Trạng thái này không đánh dấu vấn đề là đã giải quyết. Lần treo đã xử lý
vẫn đã chặn giao diện, nên cũng cần xem xét.
Gửi lại sau khi khởi chạy
Sau khi cài đối tượng ghi nhận, gửi lại các báo cáo đang chờ qua client SDK.maxReplayBytes. Kiểm tra cả ba số đếm. Riêng số báo cáo đang chờ bằng 0 không
chứng minh đã gửi thành công.
Bật chế độ gửi bền vững trước khi gửi lại nếu một yêu cầu thất bại phải được giữ
qua lần khởi động lại tiếp theo. Không gọi purge() trong quá trình khôi phục
mạng hoặc xác thực thông thường.
Tải lên dSYM khớp với bản dựng
Tạo bản Archive của ứng dụng với thông tin gỡ lỗi được bật. Giữ dSYM từ đúng bản dựng mà người dùng đang chạy. Kiểm tra UUID image của dSYM.--expect-image-uuid cho mỗi kiến trúc cần thiết. Lệnh thất bại khi
tập UUID tìm thấy khác với tập UUID mong đợi.
Kiểm tra quyền truy cập tài khoản. Sau đó chạy cùng lệnh nhưng bỏ --dry-run.
status trong JSON cho biết kết quả:
Máy build có thể tải lên bằng khóa artifact của dự án trong
LOGBREW_TOKEN
thay vì quyền truy cập tài khoản. Tạo khóa theo hướng dẫn trong
Tạo khóa artifact. Lần tải lên
đó báo uploaded. Sau đó, xác minh từng định danh bằng quyền truy cập tài
khoản:
status: "found" xác nhận có artifact. status: "missing" nghĩa là LogBrew
không có artifact cho định danh đó.
Việc phân giải dựa trên UUID image và toàn bộ định danh artifact, không dựa
trên tên tệp nguồn. Build lại từ cùng mã nguồn có thể tạo ra UUID khác. Tải lên
đúng gói dSYM, không tải cả thư mục build.
Xác minh kết quả đọc lại từ LogBrew
Lọc danh sách vấn đề theo cùng phạm vi runtime. Ví dụ này chọn các vấn đềunresolved. Vấn đề đã giải quyết hoặc đã lưu trữ sẽ không xuất hiện.
symbolication. Ví dụ này cho thấy một số
trường được chọn từ một vấn đề có khung đã phân giải, không phải toàn bộ phản
hồi.
Đọc bằng chứng crash
Mỗi khung cóstatus riêng. Trường symbolication.status dùng cùng các giá
trị:
Trong ghi chú của bạn, giữ khung chưa phân giải ở trạng thái chưa phân giải.
Không báo nó là ngăn xếp trống.
LogBrew phân giải khung khi bạn đọc vấn đề. dSYM tải lên sau vẫn có thể phân
giải khung của sự kiện trước đó. dSYM không thể thêm các khung mà sự kiện chưa
ghi nhận.
Khung mã ứng dụng giúp thu hẹp phạm vi tìm mã, nhưng không chứng minh nguyên
nhân. Để xem breadcrumb, chuỗi ngoại lệ và bằng chứng trace, đọc kết quả điều
tra vấn đề:
source: "symbolicated" đến từ artifact đã tải
lên. Khung có source: "captured" là vị trí mà ứng dụng đã gửi. Xem
Điều tra một vấn đề để biết các trường phản hồi.
Giữ đầy đủ phạm vi dự án, bản phát hành, môi trường và dịch vụ trong mọi lần
đọc. Không mở rộng một lần tra cứu thất bại sang các dự án khác.
Xác minh thiết lập production
Dùng một lỗi thử nghiệm đã được duyệt trong bản dựng đã triển khai. Không bao giờ dùng hành động của khách hàng để kích hoạt lỗi. Kiểm tra từng mục theo thứ tự và dừng ở lỗi đầu tiên:- Định danh runtime khớp với định danh artifact đã tải lên.
- Lần khởi chạy sau gửi lại một sự kiện được xác nhận, với 0 báo cáo bị loại bỏ và 0 báo cáo đang chờ.
- Danh sách vấn đề theo phạm vi trả về vấn đề thử nghiệm với trạng thái đã xử lý như mong đợi.
- Khung mã ứng dụng mong đợi được phân giải.
- Lần khởi chạy bình thường tiếp theo không thêm lần xảy ra nào khác.
Khôi phục an toàn
Để điều tra vấn đề nói chung, dùng
Điều tra một vấn đề.
