對原生記憶體使用情形進行偵錯

Address Sanitizer:HWASan/ASan

Android 平台開發人員會使用 HWAddressSanitizer (HWASan),藉此找出 C/C++ 中的記憶體錯誤。

您可以從 ci.android.com 將預先建構的 HWASan 映像檔刷新至支援的 Pixel 裝置 (詳細設定操作說明)。

自 Android 8.0 (Oreo) 起,您也可以在未解鎖的正式版裝置上使用 ASan 偵錯應用程式。如需相關操作說明,請前往 ASan 維基

Heapprofd

Android 10 支援堆積記憶體,這是一種低負載的堆積分析器。 Heapprofd 能將原生記憶體用量歸因於程式中的呼叫堆疊。 詳情請參閱 heapprofd - Android 堆積分析器Perfetto 說明文件網站 瞭解詳情

Malloc debug

如要全面瞭解原生記憶體問題的偵錯選項,請參閱「Malloc 偵錯」和「使用 libc 回呼追蹤原生記憶體」。

libmemun 可連線

Android 的 libmemun 可連線是零負載的原生記憶體流失偵測工具。 它會使用不精確的標記和掃描垃圾收集器,掃描所有原生記憶體,並將任何無法存取的區塊視為記憶體流失。如需相關使用操作說明,請參閱 libmemunreachable 說明文件

Malloc 掛鉤

如要自行打造工具,Android 的 libc 也支援攔截 程式執行期間發生的配置/免費呼叫如需相關使用操作說明,請參閱 malloc_hooks 說明文件

Malloc 統計資料

Android 支援對 <malloc.h> 使用 mallinfo(3)malloc_info(3) 擴充功能。 malloc_info 函式適用於 Android 6.0 (Marshmallow) 以上版本 記錄在 Bionic 的 <malloc.h>

Dalvik 偵錯監視程序伺服器

您也可以使用 Dalvik Debug 監控伺服器 (DDMS),取得 Malloc 偵錯的圖形檢視畫面 輸出內容

如要使用 DDMS,請先開啟原生記憶體 UI:

  1. 開啟「~/.android/ddms.cfg
  2. 新增這一行:native=true

重新啟動 DDMS 並選取程序後,您可以切換至新的原生配置分頁,並在該分頁中填入配置清單。這項功能特別適合用於偵錯記憶體流失問題。