Gỡ lỗi sử dụng bộ nhớ gốc

Address Sanitizer: HWASan/ASan

Nhà phát triển nền tảng Android sử dụng HWAddressSanitizer (HWASan) để tìm lỗi bộ nhớ trong C/C++.

Bạn có thể truyền nhanh hình ảnh HWASan tạo sẵn sang các thiết bị Pixel được hỗ trợ từ ci.android.com (hướng dẫn thiết lập chi tiết).

Kể từ Android 8.0 (Oreo), bạn cũng có thể sử dụng ASan để gỡ lỗi ứng dụng trên các thiết bị phát hành chính thức không được root. Bạn có thể xem hướng dẫn trên trang wiki của ASan.

Heapprofd

Android 10 hỗ trợ heapprofd, một trình phân tích tài nguyên bộ nhớ lấy mẫu có mức hao tổn thấp. heapprofd cho phép bạn phân bổ mức sử dụng bộ nhớ gốc cho các ngăn xếp lệnh gọi trong chương trình của mình. Hãy xem heapprofd – Trình phân tích tài nguyên trên Android trên trang tài liệu Perfetto để biết thêm thông tin.

Gỡ lỗi Malloc

Hãy xem phần Gỡ lỗi MallocTheo dõi bộ nhớ gốc bằng lệnh gọi lại libc để nắm được nội dung mô tả toàn diện về các lựa chọn gỡ lỗi có sẵn cho các vấn đề về bộ nhớ gốc.

libmemunreachable

libmemunreachable của Android là một trình phát hiện rò rỉ bộ nhớ gốc không tốn nhiều tài nguyên. Trình phân tích bộ nhớ này sử dụng một lượt thu gom rác đánh dấu và xoá không chính xác trên tất cả bộ nhớ gốc, báo cáo mọi khối không thể truy cập dưới dạng rò rỉ. Hãy xem tài liệu về libmemunreachable để nắm được hướng dẫn sử dụng.

Hook Malloc

Nếu bạn muốn xây dựng các công cụ của riêng mình, libc của Android cũng hỗ trợ chặn tất cả lệnh phân bổ/lệnh gọi tự do xảy ra trong quá trình thực thi chương trình. Xem tài liệu về malloc_hooks để nắm được hướng dẫn sử dụng.

Số liệu thống kê về Malloc

Android hỗ trợ các tiện ích mallinfo(3)malloc_info(3) cho <malloc.h>. Hàm malloc_info có trong Android 6.0 (Marshmallow) trở lên và lược đồ XML của hàm này được ghi chép trong <malloc.h> của Bionic.

Dalvik Debug Monitor Server

Bạn cũng có thể sử dụng Dalvik Debug Monitor Server (DDMS) để có được chế độ xem đồ hoạ của đầu ra Malloc Debug.

Để sử dụng DDMS, trước tiên, hãy bật giao diện người dùng bộ nhớ gốc của DDMS:

  1. Mở ~/.android/ddms.cfg
  2. Thêm dòng: native=true

Khi khởi chạy lại DDMS và chọn một quy trình, bạn có thể chuyển sang thẻ phân bổ gốc mới và điền sẵn thẻ này bằng danh sách các hoạt động phân bổ. Điều này đặc biệt hữu ích khi gỡ lỗi rò rỉ bộ nhớ.