調試本機內存使用

地址消毒劑:HWASan/ASan

Android 平台開發人員使用HWAddressSanitizer (HWASan) 來查找 C/C++ 中的內存錯誤。

您可以從ci.android.com將預構建的 HWASan 圖像刷寫到支持的 Pixel 設備(詳細設置說明)。

從 Android 8.0 (Oreo) 開始,還可以使用 ASan 在非 root 生產設備上調試應用程序。您可以在ASan wiki上找到說明。

堆文件

Android 10 支持 heapprofd,這是一種低開銷的採樣堆分析器。 heapprofd 允許您將本機內存使用歸因於程序中的調用堆棧。有關詳細信息,請參閱 Perfetto文檔站點上的heapprofd - Android 堆分析器

Malloc 調試

有關可用於本機內存問題的調試選項的詳細說明,請參閱使用 libc 回調Malloc 調試和本機內存跟踪。

libmemun 可達

Android 的 libmemunreachable 是一個零開銷的原生內存洩漏檢測器。它在所有本機內存上使用不精確的標記和清除垃圾收集器傳遞,將任何無法訪問的塊報告為洩漏。有關使用說明,請參閱libmemunreachable 文檔

Malloc 鉤子

如果您想構建自己的工具,Android 的 libc 還支持攔截程序執行期間發生的所有分配/釋放調用。有關使用說明,請參閱malloc_hooks 文檔

馬爾洛克統計

Android 支持<malloc.h>mallinfo(3)malloc_info(3)擴展。 malloc_info函數在 Android 6.0 (Marshmallow) 及更高版本中可用,其 XML 架構記錄在 Bionic 的<malloc.h>中。

Dalvik 調試監控服務器

您還可以使用Dalvik 調試監視器服務器(DDMS) 來獲取 Malloc 調試輸出的圖形視圖。

要使用 DDMS,首先打開其本機內存 UI:

  1. 打開~/.android/ddms.cfg
  2. 添加行: native=true

重新啟動 DDMS 並選擇一個進程後,您可以切換到新的本機分配選項卡並使用分配列表填充它。這對於調試內存洩漏特別有用。