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

Địa chỉ Sanitizer: HWASan/ASan

Các 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ể flash hình ảnh HWASan dựng sẵn vào 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ị sản xuất chưa root. Bạn có thể tìm thấy hướng dẫn trên wiki ASan .

Heapprofd

Android 10 hỗ trợ heapprofd, một công cụ phân tích vùng heap lấy mẫu với chi phí thấp. heapprofd cho phép bạn quy việc sử dụng bộ nhớ riêng cho các ngăn xếp lệnh gọi trong chương trình của bạn. Xem heapprofd - Android Heap Profiler trên trang tài liệu Perfetto để biết thêm thông tin.

Gỡ lỗi Malloc

Xem Gỡ lỗi MallocTheo dõi bộ nhớ gốc bằng cách sử dụng Lệnh gọi lại libc để biết mô tả kỹ lưỡng về các tùy chọn gỡ lỗi có sẵn cho các sự cố bộ nhớ gốc.

libmemuncó thể truy cập được

libmemunreachable của Android là một công cụ phát hiện rò rỉ bộ nhớ gốc không tốn chi phí. Nó sử dụng một trình thu thập rác đánh dấu và quét không chính xác trên tất cả bộ nhớ riêng, báo cáo bất kỳ khối không thể truy cập nào là rò rỉ. Xem tài liệu libmemunreachable để biết hướng dẫn sử dụng.

móc 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 gọi phân bổ/miễn phí xảy ra trong quá trình thực thi chương trình. Xem tài liệu malloc_hooks để biết hướng dẫn sử dụng.

Thống kê Malloc

Android hỗ trợ tiện ích mở rộng mallinfo(3)malloc_info(3) cho <malloc.h> . Hàm malloc_info có sẵn trong Android 6.0 (Marshmallow) trở lên và lược đồ XML của nó được ghi lại trong <malloc.h> của Bionic.

Máy chủ giám sát gỡ lỗi Dalvik

Bạn cũng có thể sử dụng Máy chủ giám sát gỡ lỗi Dalvik (DDMS) để có được chế độ xem đồ họa về đầu ra Gỡ lỗi Malloc.

Để 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 nó:

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

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