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

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

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

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

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

เฮพพรอฟด์

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

ดีบัก Malloc

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

libmemunreachable

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

ตะขอ Malloc

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

สถิติของมัลลอค

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

เซิร์ฟเวอร์ตรวจสอบการดีบัก Dalvik

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

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

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

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