การดีบักการใช้หน่วยความจำดั้งเดิม

น้ำยาฆ่าเชื้อที่อยู่: HWASan/ASan

นักพัฒนาแพลตฟอร์ม Android ใช้ HWAddressSanitizer (HWASan) เพื่อค้นหาจุดบกพร่องของหน่วยความจำใน C/C++

คุณสามารถแฟลชรูปภาพ HWASan ที่สร้างไว้ล่วงหน้าไปยังอุปกรณ์ Pixel ที่รองรับได้จาก ci.android.com ( คำแนะนำในการตั้งค่าโดยละเอียด )

ตั้งแต่ Android 8.0 (Oreo) ก็เป็นไปได้ที่จะใช้ ASan เพื่อดีบักแอปบนอุปกรณ์ที่ใช้งานจริงที่ไม่ได้รูท คุณสามารถหาคำแนะนำได้จาก ASan wiki

Heapprofd

Android 10 รองรับ heapprofd ซึ่งเป็นตัวสร้างโปรไฟล์ฮีปสุ่มตัวอย่างค่าโสหุ้ยต่ำ heapprofd ให้คุณระบุการใช้งานหน่วยความจำดั้งเดิมกับคอลสแต็คในโปรแกรมของคุณ ดูข้อมูลเพิ่มเติม ที่ heapprofd - Android Heap Profiler ใน เว็บไซต์เอกสารประกอบของ Perfetto

ดีบัก Malloc

ดู Malloc Debug และNative Memory Tracking โดยใช้ libc Callbacks สำหรับคำอธิบายโดยละเอียดเกี่ยวกับตัวเลือกการดีบักที่มีให้สำหรับปัญหาหน่วยความจำดั้งเดิม

libmemunreachable

libmemunreachable ของ Android เป็นเครื่องตรวจจับการรั่วไหลของหน่วยความจำแบบเนทีฟที่ไม่มีค่าใช้จ่าย มันใช้ตัวรวบรวมขยะการทำเครื่องหมายและกวาดที่ไม่แม่นยำส่งผ่านหน่วยความจำดั้งเดิมทั้งหมด โดยรายงานบล็อกที่ไม่สามารถเข้าถึงได้ว่าเป็นการรั่วไหล ดู เอกสาร libmemunreachable สำหรับคำแนะนำการใช้งาน

ตะขอ Malloc

หากคุณต้องการสร้างเครื่องมือของคุณเอง libc ของ Android ยังรองรับการสกัดกั้นการโทรที่จัดสรร/ฟรีทั้งหมดที่เกิดขึ้นระหว่างการทำงานของโปรแกรม ดู เอกสารประกอบของ malloc_hooks สำหรับคำแนะนำการใช้งาน

สถิติ Malloc

Android รองรับส่วน mallinfo(3) และ malloc_info(3) เป็น <malloc.h> ฟังก์ชัน malloc_info มีอยู่ใน Android 6.0 (Marshmallow) ขึ้นไป และสคีมา XML ได้รับการบันทึกไว้ใน <malloc.h> ของ Bionic

Dalvik Debug Monitor Server

คุณยังสามารถใช้ Dalvik Debug Monitor Server (DDMS) เพื่อรับมุมมองแบบกราฟิกของเอาต์พุต Malloc Debug

ในการใช้ DDMS ก่อนอื่นให้เปิด UI หน่วยความจำดั้งเดิม:

  1. เปิด ~/.android/ddms.cfg
  2. เพิ่มบรรทัด: native=true

เมื่อเปิดใช้ DDMS อีกครั้งและเลือกกระบวนการ คุณสามารถสลับไปที่แท็บการจัดสรรดั้งเดิมและเติมข้อมูลด้วยรายการการจัดสรร สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับการดีบักการรั่วไหลของหน่วยความจำ