Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

ネイティブ メモリの使用をデバッグする

AddressSanitizer

Android プラットフォームのデベロッパーは、C/C++ のメモリバグを検出するために AddressSanitizer(ASan)を使用します。

Android 8.0(Oreo)以降では、ASan を使用して、ルート権限がない製品版デバイス上でもアプリをデバッグできるようになりました。使用方法については、ASan Wiki をご覧ください。

Heapprofd

Android 10 は、オーバーヘッドが少ないサンプリング ヒープ プロファイラである heapprofd をサポートしています。heapprofd を使用すると、プログラム内のコールスタックに起因するネイティブ メモリの使用を追跡できます。詳細については、Perfetto ドキュメント サイトheapprofd - Android Heap Profiler をご覧ください。

malloc デバッグ

ネイティブ メモリの問題に使用できるデバッグ オプションの詳細については、malloc デバッグlibc コールバックを使用したネイティブ メモリ トラッキングをご覧ください。

libmemunreachable

Android の libmemunreachable を使用すると、オーバーヘッドがゼロのネイティブ メモリリークを検出できます。精密でないマークアンドスイープ ガベージ コレクタパスをすべてのネイティブ メモリ上で使用し、到達不能なブロックをリークとして報告します。使用方法については、libmemunreachable のドキュメントをご覧ください。

malloc フック

独自のツールをビルドしたい場合は、プログラムの実行中に発生するすべての割り当て / 解放呼び出しをインターセプトする Android の libc の機能も利用できます。使用方法については、malloc_hooks のドキュメントをご覧ください。

malloc 統計情報

Android は、<malloc.h> に対する mallinfo(3) および malloc_info(3) 拡張機能をサポートしています。malloc_info 関数は、Android 6.0(Marshmallow)以上で利用できます。その XML スキーマは、Bionic の <malloc.h> に記載されています。

Dalvik Debug Monitor Server

Dalvik Debug Monitor Server(DDMS)を使用して、Malloc デバッグの出力をグラフィカル表示することもできます。

DDMS を使用するには、まずネイティブ メモリ UI を有効にします。

  1. ~/.android/ddms.cfg を開きます。
  2. native=true の行を追加します。

DDMS を再起動してプロセスを選択すると、新しいネイティブ割り当てタブに切り替えて、割り当てのリストを入力できます。これは、特にメモリリークのデバッグで役立ちます。