네이티브 메모리 사용 디버깅

Address Sanitizer(HWASan/ASan)

Android 플랫폼 개발자는 HWAddressSanitizer(HWASan)를 사용하여 C/C++에서 메모리 버그를 찾습니다.

미리 빌드된 HWASan 이미지를 ci.android.com에서 지원되는 Pixel 기기에 플래시할 수 있습니다(자세한 설정 안내).

Android 8.0(Oreo)부터는 루팅되지 않은 프로덕션 기기에서 ASan을 사용해 앱을 디버깅할 수도 있습니다. 자세한 안내는 ASan 위키를 참조하세요.

Heapprofd

Android 10은 오버헤드가 낮은 샘플링 힙 프로파일러인 heapprofd를 지원합니다. heapprofd를 사용하면 네이티브 메모리 사용량을 프로그램의 호출 스택에 표시할 수 있습니다. 자세한 내용은 Perfetto 문서 사이트에서 heapprofd - Android 힙 프로파일러를 참조하세요.

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 디버그 모니터 서버

Dalvik 디버그 모니터 서버(DDMS)를 사용하여 Malloc 디버그 출력을 그래픽 뷰로 볼 수도 있습니다.

DDMS를 사용하려면 다음 단계에 따라 먼저 네이티브 메모리 UI를 사용 설정하세요.

  1. ~/.android/ddms.cfg 열기
  2. native=true 행을 추가합니다.

DDMS를 다시 실행하고 프로세스를 선택하면 새 기본 할당 탭으로 전환하여 할당 목록을 채울 수 있습니다. 이 방법은 특히 메모리 누수를 디버깅할 때 유용합니다.